Java 为什么Hibernate会话不反映应用程序外部所做的更改
我正在开发一个Java 为什么Hibernate会话不反映应用程序外部所做的更改,java,mysql,hibernate,Java,Mysql,Hibernate,我正在开发一个Java应用程序,它可以快速检查客户机数据库表中的更新,如果发现任何更新,则使用Hibernate和MySQL将其传输到服务器数据库 当我们使用hibernate会话更改数据库时,它工作得很好,但每当我使用MySQL Workbench更改数据库表值时,它都会返回与以前相同的记录 如何使用hibernate会话更新表中的外部更改 public List<com.ctpl.models.client.MasterTable> getAllClientMasterTable
Java
应用程序,它可以快速检查客户机数据库表中的更新,如果发现任何更新,则使用Hibernate
和MySQL
将其传输到服务器数据库
MySQL Workbench
更改数据库表值时,它都会返回与以前相同的记录public List<com.ctpl.models.client.MasterTable> getAllClientMasterTableWithServerFlag() {
try {
clientSession = ClientHibernateUtil.getSessionFactory().openSession();
clientSession.flush();
Criteria criteria = clientSession.createCriteria(com.ctpl.models.client.MasterTable.class);
criteria.add(Restrictions.eq("serverFlag", 0));
List<com.ctpl.models.client.MasterTable> clientMasterTables = criteria.list();
clientSession.close();
return clientMasterTables;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
公共列表getAllClientMasterTableWithServerFlag(){
试一试{
clientSession=ClientHibernateUtil.getSessionFactory().openSession();
clientSession.flush();
Criteria=clientSession.createCriteria(com.ctpl.models.client.MasterTable.class);
添加(Restrictions.eq(“serverFlag”,0));
List clientMasterTables=criteria.List();
clientSession.close();
返回clientMasterTables;
}捕获(例外e){
e、 printStackTrace();
返回null;
}
}
我在这里遗漏了什么?看看Session.clear()或execute方法 请参阅本文:
希望这有帮助,我们只需要在hibernate中添加连接池,如下所示
找到了使用轻松实现它的最佳方法您可能忘记了在MySQL workbench中提交事务。或者您没有修改您认为正在修改的表/数据库。亲爱的@JBNizet我对数据库/表非常确定,在MySQL Workbench中,它是自动提交的,顺便说一句,我也在手动提交。然后您可能配置了二级缓存,并且正在从该缓存中获取过时值。Boss@JBNizet没有二级缓存,但我认为这是因为一级缓存,但我已读到,我们无法更改第一级缓存,请使用任何其他解决方案…第一级缓存与会话实例相关联,并且您的方法创建了一个新会话,所以…谢谢你的回复@Godwin,但是你关于
session.clear()
的想法在这种情况下不起作用。顺便说一句,它会在每次请求时强制hibernate.cfg.xml文件重新配置,所以我认为这不是一个好主意,尽管它在这里不起作用。