私が経験した限り、JPA/hibernateはデータベースに存在するか、トランザクション中に永続化されてデータベースにフラッシュされたエンティティを返します。要求されたとき - JPAコミットのみ(フラッシュされたエンティティを避ける)
アクティブなトランザクション、フラッシュされたエンティティなどを考慮せずに、データベースの状態をHibernateに依頼することができるクエリが必要です。これらの特定のケースでは、コミット。
flushmodeを 'COMMIT'に設定すると、この 'findCommittedEntities'メソッドを呼び出すような特定のケースでは、スキップされたエンティティをスキップするだけでDBを読みたいと思っています。
私が探しているものを示して簡単なコード:
@Transactional()
public void mySampler(){
Entity ent=new Entity();
entityManager.persist(ent)
/*Here JPA/Hibernate configured with flushmode AUTO will flush the
*persisted entity to db. That's Perfect!
*/
List<Entity> entities=service.findEntities()
//So this list should be of size 1 assuming we started with an empty DB of course!
System.out.println(entities.size())
//But I also would like to be able to read the DB as is:
List<Entity> entitiesCommited=service.findCommittedEntities(...)
//This should be of size 0 as transaction is not commited yet
System.out.println(entitiesCommited.size())
}
だから私はそれを達成するために何をすべき?それとも全く不可能なのでしょうか?
環境に関しては、私はOSGiのと牡羊座JPA/JTAで働いているが、私は、私はすでに解決策を見つけたし、楽しみは他の誰かのために有用である可能性があるとして、これは私の質問に答えるために、ここで