NamedQuery
を使用してエンティティを取得するメソッドがあります。私は各エンティティの値を更新し、別の名前付きクエリ(同じメソッドでTransaction
)を実行して古い値でフィルタリングし、変更しなかった場合と同じエンティティを返します。JPA NamedQueryが変更されたエンティティへの変更を取得しない
私は、EntityManager
をフラッシュする必要があること、また自動的に実行する必要があることを理解していますが、違いはありません。
私はhibernate SQLロギングを有効にしていますが、flushを呼び出すとコンテナトランザクションがコミットするときに、エンティティがでないことがわかります。
EntityManager entityManager = getPrimaryEntityManager();
MyEntity myEntity = entityManager.find(MyEntityImpl.class, allocationId);
myEntity.setStateId(State.ACTIVE);
// Flush the entity manager to pick up any changes to entity states before we run this query.
entityManager.flush();
Query countQuery = entityManager
.createNamedQuery("MyEntity.getCountByState");
// we're telling the persistence provider that we want the query to do automatic flushing before this
// particular query is executed.
countQuery.setParameter("stateId", State.CHECKING);
Long count = (Long) countQuery.getSingleResult();
// Count should be zero but isn't. It doesn't see my change above