【发布时间】:2010-10-21 00:40:53
【问题描述】:
我正在使用 JPA(1.0 或 2.)+hibernate(3.4.0 或 3.6.0),我遇到了我认为在某处缓存的问题。我做什么:
- 使用我的 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.在persistence.xml中关闭L2和查询缓存:
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
2.在运行 getResultList() 之前强制缓存驱逐(使用 JPA 2.0):
entityManager.getEntityManagerFactory().getCache().evictAll()
3. 尝试到处调用 refresh() - 无效。
我错过了什么吗?
任何帮助将不胜感激。
谢谢, 苏普
【问题讨论】:
-
提供一个允许重现的测试用例。
标签: java hibernate jpa caching persistence