休眠查询不返回新数据

时间:2018-12-03 02:28:24

标签: java mysql hibernate

我有一个控制器,如下所示:

SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Transaction tx = null;
Session session = sessionFactory.openSession();
session.flush();
tx=session.beginTransaction();    

List<Plane> allPlanes = session.createQuery("from Planes").list();      
tx.commit();


session.close();

当我通过My​​SqlWorkBench GUI应用程序在表中添加新记录并再次点击该控制器时,它不会获取最新记录。只有在重新启动tomcat之后,新记录才会被拾取。我已经尝试在配置文件中为休眠设置各种缓存选项,但似乎没有任何区别。如何确保无论在何处更新数据,该查询都将始终返回数据库中数据的新副本?

2 个答案:

答案 0 :(得分:0)

您无法在JPA之外对数据库进行更改,并且希望JPA知道这一点。

有一种方法可以使休眠状态重置,但是必须先触发数据库,​​然后通过网络发送消息,或者手动调用函数。

在我的系统上,当我需要在后台进行并直接更新数据库而无需重新启动JVM时,可以通过菜单调用手动重置。

em.getEntityManagerFactory().getCache().evictAll();

答案 1 :(得分:0)

  

无论如何在哪里更新数据,该如何确保   查询将始终返回数据库中数据的新副本吗?

由于您将问题限制为此查询,因此无需更改配置或全局逐出所有缓存。

在调用csrutil enable之前,只需使用org.hibernate.query.Query.list()作为{strong>此查询的参数调用org.hibernate.query.Query.setCacheable(boolean)