首页 > 解决方案 > 休眠查询不返回新数据

问题描述

我有一个控制器如下:

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后,新记录才会被拾取。我尝试在配置文件中为休眠设置各种缓存选项,但似乎没有任何区别。如何确保无论数据在何处更新,此查询将始终返回数据库中数据的新副本?

标签: javamysqlhibernate

解决方案


您不能在 JPA 之外对数据库进行更改并期望 JPA 知道它。

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

在我的系统上,当我需要进入幕后直接更新数据库时,我会从菜单中调用手动重置,而无需重新启动 JVM。

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

推荐阅读