2017-05-19 16 views
0

私はguice 4.1をpersist拡張とともに使用しています。@Transactionalが動作することを期待していますが、そうではありません。私は、ウィキに続き、この記事を読んで、しかし無駄に:guice - @Transactional - not working

Managing transactions in JavaSE with Hibernate and Guice

ジャスト再反復...私がやっているために:

  1. をGuiceの-持続
  2. 使用に応じて、 googleの@トランザクションアノテーション
  3. guiceによって管理されているpublicまたはprotectedメソッドでのみ注釈を使用
  4. PersistServiceを開始します。
+0

しようとしたソリューションを使用して動作しますが、明示的に管理することになった方法です:。entityManager.getTransaction()(開始)。 entityManager.persist(エンティティ); entityManager.getTransaction()。commit(); – Justas

答えて

0

現在のSprintでライブラリをアップグレードする際に、同様の問題が発生しました。私たちの失敗したユニットテストはすべて、私たちが注入されているクラスに関連していましたが、モジュールに束縛されていませんでした。

(Guice 4.0では問題ありませんでした)

インターフェイスにバインドする場合や、特別な要件がある場合は、クラスをバインドする傾向があります。したがって、引数のないコンストラクタを持つ、または@Injectで注釈を付けた単純なクラスがあれば、そのクラスをモジュールにバインドしません。

public class AA { 

    public AA() { 

    } 

    @Transactional 
    public void test() { 
     System.out.println("" + getClass().getName()); 
    } 
} 

クラスAAを試験()を呼び出して、注射した場合Guiceの4.1への出力をアップグレードした後、出力

package.test.AA$$EnhancerByGuice$$e2d19b62 

モジュールの変更に次の追加
package.test.AA 

であろうプロキシへの注射を戻す。どの@TransactionalがSOにAOP

bind(AA.class); 
+0

ありがとう、私は実際にそれを今日また見つけました。それはおそらくベストプラクティスに従うことです。 – Walter