2017-10-19 10 views
0

現在のトランザクションに格納されているすべてのエントリをデータベースにフラッシュしたい(コミットによって現在のトランザクションを終了させずに)。JPA EntityTransaction flush

これを行う前にトランザクションがアクティブかどうかを確認する必要がありますか?

if (this.entityTransaction.isActive()) 
    { 
     this.entityManager.flush(); 
    } 

メソッドのjavadocツールによると、あなたに

+0

不明な理由でトランザクションに参加しておらず、変更が失われる場合は、とにかく例外をスローしないでください。 – Chris

+0

@Chrisあなたは...ポイントを得ました。しかし、 "isActive"は実際に何を示していますか?私はそれが "システムに残っているデータがある"と思った - それをデータベースにフラッシュする。 –

+0

いいえ、isActiveは、開始されたトランザクションがあることを意味します。それは、永続性単位内に何があるか、または変更が行われたことについては何も教えていません。 Flushは、変更があるかどうかを判断し、変更のみをプッシュしますが、目的を意識している場合にのみ呼び出すようにしてください。たとえば、データベースにステートメントを強制して、コード内で楽観的なロックや制約の問題を待つのではなく、トランザクションがコミットするまで – Chris

答えて

0

ありがとうのEclipseLinkののEntityManagerクラスのフラッシュ

https://www.eclipse.org/eclipselink/api/2.6/javax/persistence/EntityManager.html#flush()

無効フラッシュ() 永続コンテキストを同期基になるデータベースに転送します。 例外: TransactionRequiredException - トランザクションがない場合や、エンティティ・マネージャが現在のトランザクション PersistenceExceptionに結合されていない場合 - フラッシュが

を失敗したかどうかをチェックする必要があるようなので、はい、それは見えます、他の方法あなたを"TransactionRequiredException"タイプの例外が発生する可能性があります

関連する問題