1

リストの要素の 1 つが確立されたビジネス ルール内の理由で失敗した場合 (つまり、カスタマイズ例外をスローした場合)、ロールバックを実行できる方法を見つけようとしています。

例 (リスト内の 1 つの要素が失敗した場合、アイデアは何も記録しません)

public class ControlSaveElement {

 public void saveRecords(List<MyRecord> listRecords) {

  Boolean status = true;

  foreach(MyRecord element: listRecords) {
     // Here is business rules
     if(element.getStatus() == false) {
        // something
        status = false;
     }
     element.persist();
  }

  if(status == false) {
     // I need to do roll back from all elements persisted before
  }
 }

...
}

何か案が?Roo 1.2.2 で作業しています。

4

2 に答える 2

2

あなたが説明しているのは、トランザクションである必要があるサービス メソッド (saveRecords) です。@Transactional アノテーションを付けてから例外を発生させるか、TransactionTemplate を使用して詳細に制御し、手動でロールバックを行う必要があります。

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html

http://springinpractice.com/2008/03/18/annotation-based-transactions-in-spring/

例外に遭遇せずにトランザクションのロールバックを強制する方法はありますか?

于 2012-11-23T01:09:33.610 に答える
1

MyRecord エンティティに新しい静的メソッドを作成するのはどうですか:

@Transactional
public static void saveMyRecordsList(List<MyRecord> listRecords) {

  boolean persistAll = true;

  foreach(MyRecord element: listRecords) {
     if(element.getStatus() == false) {
        persistAll = false;
     }
  }

  if (persistAll) {
      foreach(MyRecord element: listRecords) {
         entityManager().persist(element);
      }
  }
 }

これは、要素を永続化してロールバックするよりも効率的でしょうか?

于 2012-11-24T17:11:46.470 に答える