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