0

Spring AOP を使用して、Spring + Hibernate プロジェクトをトランザクション対応に構成しました。

DAO メソッドをチェックインすると、TransactionSynchronizationManager.isActualTransactionActive()true と表示されます。

サービス クラスから 2 つの DAO メソッドを呼び出しています。2 番目の DAO メソッドでは、'devide by zero'意図的にエラーをスローし、2 つのメソッドがロールバックするかどうかを確認します。

現在、最初のものは新しいレコードをうまく挿入しているようです。最初のメソッドは
ロールバックすべきではありませんか?

更新 前の質問を参照できますが、これは長すぎると思います。
Spring 3.x および Hibernate 4 でのトランザクション管理


質問を (できる限り) 要約すると
、DAO クラスから 2 つのメソッドを呼び出す 1 つのサービス クラス メソッドがあります。
そのサービス クラスは、Spring MVC コントローラーとその委任者から呼び出されています。

次のように aop:config を取得しました

<aop:config proxy-target-class="true">
  <aop:pointcut id="transactionalServiceOperation" expression="execution(* kr.co.sgis.services.web.cooingbee.Crudable.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionalServiceOperation"/>
</aop:config>


私のインターフェース Crudable は次のようになります

public interface Crudable {

    public int delete(CooingbeeFetchable bean);
    public int save(CooingbeeFetchable bean);
    public int update(CooingbeeFetchable bean);
    public Set<CooingbeeFetchable> list(CooingbeeFetchable bean);
    public CooingbeeFetchable get(int id);
    public int count(CooingbeeFetchable bean);
    public int save2(CooingbeeFetchable bean);
}


DAO と Service クラスの両方が Cruadable インターフェースを実装しています。たぶんそれが、私が期待したように機能していない理由だと思いますか?
長すぎずに十分な情報を提供できたことを願っています:)

4

2 に答える 2

0

両方のメソッドがトランザクションの場合、当然、2 番目のメソッドが失敗しても最初のメソッドには影響しません。両方のメソッドが単一の (正しい) トランザクションの一部であると考える場合、それについて、または部分的にコミットしているように見えるという事実について、あなたは間違っています。どちらか一方が正しい理由について良い答えを得るには、さらに多くの情報を提供する必要があります。

于 2013-02-13T05:01:16.077 に答える
0

私はついにそれを理解しました。
これを読む。
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/transaction.html#transaction-declarative-rolling-back

ドキュメントには、ロールバックできるように、DAO メソッドに何か問題があることを Spring が知るために例外をスローする必要があると書かれています。以前は、私の DAO メソッドは例外をスローしませんでした。代わりに、メソッド本体を try-catch ブロックで囲むことによって、例外を独自に処理していました。

また、次のように aop:config タグを構成する必要があります。

<aop:config proxy-target-class="true">
  <aop:pointcut id="transactionalServiceOperation" expression="execution(* kr.co.sgis.services.web.cooingbee.Crudable.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionalServiceOperation"/>
</aop:config>

これが役立つことを願っています!:)
乾杯

于 2013-02-13T06:57:16.577 に答える