gpt4 book ai didi

java - hibernate getResultList() 返回不同的数据

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:48 25 4
gpt4 key购买 nike

我正在使用 JPA(1.0 或 2.)+ hibernate(3.4.0 或 3.6.0),我遇到了一个问题,我认为在某个地方进行缓存。我做什么:

  1. 使用我的 JPA 类查找对象(数据库中具有特定 ID 的行)
  2. 更新对象上的 boolean 标志(数据库中的tinyint字段)
  3. 持久化对象
  4. 使用 getResultList() 从数据库中获取整个表,希望能够反射(reflect)更改。

问题:

我第一次调用 getResultList 时会反射(reflect)更改,但第二次它会显示之前的状态。第三次正确显示;第四,之前的状态;等等。每次我在 table 上调用 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() - 没有效果。

我错过了什么吗?

如有任何帮助,我们将不胜感激。

谢谢,索普

最佳答案

我之前在几个不同的 JPA 提供商中都遇到过这个问题(或者非常类似的问题)。确保您显式关闭 EntityManager。

关于java - hibernate getResultList() 返回不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com