私はJPAを使用しています。私は抽象クラスを持っています。私は自分のentityManagerを挿入して、ジェネリックメソッドを持っています。データベースにオブジェクトを保存し、すべてのサービスクラスでその抽象クラスを継承します。クライアントとクライアントの詳細を保持しますが、クライアントの永続性に例外がある場合、私のプログラムはクライアントの詳細を保持します。なぜ、私は持続例外があるときにロールバックを探します。@PersistenceContextによって挿入されたEntityManagerのトランザクションをロールバックする方法はありますか?
私はentityManager.getTransaction().rollback();
のようにすることができますが、私のエンティティマネージャを管理していますが、私の場合はコンテナで管理しています。ここで
は私の抽象クラスです:
public abstract class AbstractEntityFactory<E>{
protected static final transient Logger LOGGER = CommonLogger.getLogger(AbstractEntityFactory.class);
@PersistenceContext(unitName = "Test_PU")
@Transient
@XmlTransient
private transient EntityManager entityManager;
public E persist(final E arg0) {
LOGGER.debug("persist : Begin");
this.getEntityManager().persist(arg0);
this.getEntityManager().flush();
LOGGER.debug("persist : End");
return arg0;
}
}
NB:私はあなたが現在のトランザクションをロールバックするUserTransaction.rollbackを使用して試すことができますサーバー
を経由して、それを得ることができる必要がありますか?しかし、 'RuntimeException'をスローするだけでトランザクションをロールバックする必要があります。それは起こっていないのですか? –
例外が発生した場合は、すべてのコンテナがトランザクションをロールバックし、永続性例外が発生した場合は、JPAによってロールバック用のトランザクションにマークする必要があります。あなたはあなたが解決しようとしている問題についてもっと詳しく説明できますか? – Chris