sql >> データベース >  >> RDS >> Oracle

Seam @Transactionalアノテーションが機能していませんか?

    Seamがどのように機能するかよくわからないので、この回答が当てはまらない場合は事前にお詫びします。

    @Transactionalというメソッドに気づきました protected 。これは、別の内部メソッドによって呼び出されていることを意味します。

    SpringのAOPを使用して、 publicをマークします。 @Transactionalを使用するメソッド これらはラップされ、トランザクションプロキシに置き換えられます。外部クラスがpublicを呼び出すとき メソッドでは、トランザクションを形成するプロキシを呼び出しています。外部クラスが別のpublicを呼び出す場合 ではないメソッド @Transactionalでマークされています 次に、内部メソッドを呼び出します。つまり、プロキシがまったく呼び出されていないため、トランザクションは作成されません。

    春には、doWork()を変更しても 公開する方法でも、同じ問題が発生します。プロキシオブジェクトが呼び出されていないため、トランザクションはありません。クラス内で行われたメソッド呼び出しは、プロキシオブジェクトを呼び出していません。

    いくつかのドキュメントをざっと読むと、Spring AOPのように、SeamがCGLibプロキシ を使用していることがわかります。 。問題は、プロキシされたオブジェクト内から呼び出された場合でも、すべてのメソッドをプロキシできるかどうかです。この回答が当てはまらない場合は、時間を無駄にして申し訳ありません。




    1. Mac OSXYosemiteでローカルホストを実行する

    2. djangoを使用した条件付きupdate_or_create

    3. MySQLとMacOSSierraとの互換性

    4. TSQLのCOALESCE関数