我正在编写 JSP / JSF Web应用程序,目前正在使用 Hibernate(和MySQL)库。当我使用正在运行的应用程序更新数据时,一切正常。
示例:我修改了客户信息
虽然我手动更改数据或手动在MySQL中添加条目,但更改在我的应用程序端无效。
问题:每次都要重新加载应用程序。
任何人都可以理解我的问题并找到快速解决方案吗?
答案 0 :(得分:1)
您是否在网络应用程序中使用second level cache?如果是这样,您的选择是:
如果你不使用二级缓存但遇到了你所描述的问题,那就意味着你要花太多时间来坚持你的会话。会话应 generally be short-lived。
答案 1 :(得分:0)
可能已启用Hibernate缓存,需要重新加载rows / object。
或者您也应该通过Hibernate更新/插入数据。
答案 2 :(得分:0)
我不确定您是如何配置Hibernate会话的,但是有些配置要求您在关闭会话之前刷新会话(例如,能够从与数据库的底层JDBC连接断开连接的会话) 。因此,在评论回复中,您说您使用session.close();
结束工作 - 尝试执行:
session.flush();
session.close();
而是看看这是否能解决你所看到的问题。
否则,我会确认您确实没有使用二级缓存...在Hibernate配置中明确禁用它,将hibernate.cache.provider_class
设置为org.hibernate.cache.NoCacheProvider
。
答案 3 :(得分:0)
试试这个:
Session session = SessionFactoryUtil.getInstance().openSession();
session.clear();
或者,您可以显式使用StatelessSession,它没有缓存。详情请见:
https://www.hibernate.org/hib_docs/v3/api/org/hibernate/StatelessSession.html
答案 4 :(得分:0)
阅读其他答案和评论真的很奇怪。 您是否可以确认每次呼叫至少关闭一次Hibernate会话?您确定修改数据库的其他应用程序是否真的提交了更改?