java - 休眠查询不返回新数据
问题描述
我有一个控制器如下:
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后,新记录才会被拾取。我尝试在配置文件中为休眠设置各种缓存选项,但似乎没有任何区别。如何确保无论数据在何处更新,此查询将始终返回数据库中数据的新副本?
解决方案
您不能在 JPA 之外对数据库进行更改并期望 JPA 知道它。
有一种方法可以让休眠状态重置,但您必须让数据库触发,然后通过网络发送消息,或者手动调用函数。
在我的系统上,当我需要进入幕后直接更新数据库时,我会从菜单中调用手动重置,而无需重新启动 JVM。
em.getEntityManagerFactory().getCache().evictAll();
推荐阅读
- php - \n 使用 chrome 浏览器时不能在 php 代码中工作
- dimensions - R dim 参数说明
- dart - 如何将 Iconbutton 单击后更改为不同的 Iconbutton
- c# - unity:围绕两个Vector3的中心旋转一个网格
- linear-programming - CVRP 无需访问每个节点
- python - 如何在 Postgres 数据库中保存会话?
- json - 如何从 KeyValue 管道中过滤特定值以显示在 html 表中的特定标题下 | 角 6 +
- java - 无注射器的guice注射
- ios - 如何在 TableCell 类中使用 navigationController.pushViewController?
- node.js - 模板字符串中不允许使用八进制转义序列