Spring Transactions を理解するのに苦労しています。まず、Spring をできるだけ使わないようにしています。基本的に、JPA/Hibernate で @Transactional とその注入機能の一部を使用したいと考えています。私のトランザクションの使用は、私のサービス層にあります。私はそれらをテストケースに入れないようにしています。私はCTWを使用しており、スプリング構成です。現在、パッケージのルートでコンポーネント スキャンを実行しています。データソース、JpaTransactionManager、および EntityManagerFactory にも Java 構成を使用しています。JpaTransactionFactory の構成は次を使用します。
AnnotationTransactionAspect.aspectOf().setTransactionManager( txnMgr );
@EnableTransactionManagement は使用しません。
残念ながら、私は @Transactional のルールを理解するのに苦労しており、それらを簡単に説明する簡単なページを見つけることができません。特にセッションの使用に関して。たとえば、デフォルトの引数なしコンストラクターを持たないクラスで @Transactional を使用したい場合はどうすればよいでしょうか?
私が抱えている最も奇妙な問題は、一部の POJO サービス クラスでは Transacitonal がうまく機能する一方で、他のクラスではトランザクションが作成されているのを確認できますが、操作は最終的に「セッションがないか、セッションが閉じられました」と言って落ちることです。これを再現するためのコードがないことをお詫びします。小さなセットにはできません。これが、私が自分でそれを理解できるように、最高のリソースを探している理由です.
たとえば、遅延フェッチされた子のコレクションを取得し、それを反復処理して Set に入れ、そのセットを返すメソッドを作成できます。あるクラスでは問題なく動作しますが、@Transactional でマークされた別のクラスでは、PersistentSet を反復しようとして失敗し、セッションが存在しないと言って失敗します (トランザクションはあります)。
これは、テスト ケースでこれらのサービス オブジェクトの両方を作成し、最初のオブジェクトが何らかの形でセッションをハイジャックしているためでしょうか?
ちなみに、スプリングソースの取引書類は一通り読んだ。このような問題をデバッグするための明確なルールとヒントを探しています。ありがとう。