据我所经历的,JPA/hibernate 将返回存在于数据库中或在事务期间被持久化然后刷新到数据库中的实体。
我希望某些查询能够按原样向 Hibernate 询问数据库,而不考虑任何活动事务、任何刷新的实体等。在这些特定情况下,我只想阅读它提交的内容。
将刷新模式设置为“提交”这不是我想要的,因为我只想按原样读取数据库 - 跳过刷新的实体 - 在某些情况下,例如调用此 'findCommittedEntities' 方法。
一个简单的代码,显示我在寻找什么:
@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 和 Aries JPA/JTA 的环境,但我认为这在这里无关紧要