我正在使用JPA(1.0或2)+ hibernate(3.4.0或3.6.0),我遇到了一个问题,我想在某处缓存。我做什么:hibernate getResultList()返回不同的数据
- 查找我的JPA类的对象(行中的数据库与特定ID)
- 更新的对象上的布尔标志(TINYINT领域在数据库中)
- 持久化对象
- 用getResultList()从数据库中抓取整个表,希望能够反映这些变化。
问题:
的变化反映了getResultList我第一次称呼它,但第二次,显示之前的状态。第三次显示正确;第四,以前的状态;等等。每次我在表上调用getResultList时,似乎在两个状态之间交替。
一些代码上面的#3:
EntityTransaction entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
entityManager.persist(object);
entityTransaction.commit();
entityManager.refresh(object);
代码#4:
Query query = entityManager.createQuery("from " + object.getName());
List<T> resultList = query.getResultList();
在我的努力来解决这个问题,我有:
1.Turned L2和在persistence.xml中关闭查询缓存:
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
2.forced缓存驱逐与(使用JPA 2.0)运行getResultList()之前:
entityManager.getEntityManagerFactory().getCache().evictAll()
3.tried调用刷新()所有的地方 - 没有效果。
我错过了什么吗?
任何帮助,将不胜感激。
感谢, SOP
提供允许重现的测试用例。 – 2010-10-21 19:55:53