1

メソッドの小さな部分でトランザクションのロールバックを拒否する必要がありますが、メソッドの他の部分では標準の動作が必要なため、その方法がわかりません。

これは私のSpring、Hibernate構成です:

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

そして、例外の場合にトランザクションとロールバックを開くために、私のクラスは「@Transaction」アノテーションで宣言されています。ただし、db への重要な挿入後にコミットを強制する必要があります。これを行う方法?

これはコード例です:

@Transactional
public void myMethod(Object obj){
   check.do();
   check.control();
   try{
      dao.insert(obj);
      fileWriter.write();
      printer.print();
   }catch(Exception e){
      log.error(e);
   }
}

try ステートメント (dao.insert) 内で行うことは、自動コミットで行う必要があります。これは、挿入後にトランザクションがロールバックされることを望まないためです。私の例では、printer.print() が失敗した場合、dao.insert() がロールバックしたくありません。ただし、この動作はこの試行内でのみ必要です。

ありがとう

編集

また、@Transactional アノテーションをリモートで作成し、dao.insert のためだけにプライベート トランザクション メソッドを作成しようとしましたが、tt が他のコンポーネント内のエンティティのすべての遅延読み込みに失敗した場合 (例: printer.print() など)。

4

3 に答える 3

1

transactionManagerそのメソッドの Bean に を注入し、必要に応じてcommit/を実行します。この質問の私の答えをrollback見てください。

于 2013-06-01T22:58:25.653 に答える
1

休止状態の任意の API または構成を介してそれを達成できると思います。私が考えることができる唯一のアプローチは、メソッドを複数のメソッドに分割し、必要なものだけに @Transactional を設定することです。

于 2013-06-01T13:38:42.157 に答える