私は最近、JPA (EclipseLink が提供) の (私にとって) 予想外の動作に遭遇しました。
次のコードを検討してください。
public int myFunction() {
entityManager.getTransaction().begin(); // Application-managed EntityManager
MyEntity entity = new MyEntity();
entity.setPrimaryKey(1);
entityManager.persist(entity);
entity = entityManager.find(MyEntity.class, 1);
if (entity == null) {
return 0;
}
entityManager.getTransaction().commit();
return 1;
}
関数は 0 を返します。これは、トランザクションが閉じられる前に永続化されたエンティティが見つからないことを意味します。
質問。 まだコミットされていないが永続化されたエンティティを見つけることができる回避策はありますか? そうでない場合、自分で何らかのキャッシングを行う必要がありますか?