現在のトランザクションに格納されているすべてのエントリをデータベースにフラッシュしたい(コミットによって現在のトランザクションを終了させずに)。JPA EntityTransaction flush
これを行う前にトランザクションがアクティブかどうかを確認する必要がありますか?
if (this.entityTransaction.isActive())
{
this.entityManager.flush();
}
メソッドのjavadocツールによると、あなたに
不明な理由でトランザクションに参加しておらず、変更が失われる場合は、とにかく例外をスローしないでください。 – Chris
@Chrisあなたは...ポイントを得ました。しかし、 "isActive"は実際に何を示していますか?私はそれが "システムに残っているデータがある"と思った - それをデータベースにフラッシュする。 –
いいえ、isActiveは、開始されたトランザクションがあることを意味します。それは、永続性単位内に何があるか、または変更が行われたことについては何も教えていません。 Flushは、変更があるかどうかを判断し、変更のみをプッシュしますが、目的を意識している場合にのみ呼び出すようにしてください。たとえば、データベースにステートメントを強制して、コード内で楽観的なロックや制約の問題を待つのではなく、トランザクションがコミットするまで – Chris