Hibernate:必须重新启动Java Application才能重新加载数据

时间:2009-12-11 19:49:22

标签: java mysql hibernate jsp jsf

我正在编写 JSP / JSF Web应用程序,目前正在使用 Hibernate(和MySQL)库。当我使用正在运行的应用程序更新数据时,一切正常。

示例:我修改了客户信息

虽然我手动更改数据或手动在MySQL中添加条目,但更改在我的应用程序端无效。

问题:每次都要重新加载应用程序。

任何人都可以理解我的问题并找到快速解决方案吗?

5 个答案:

答案 0 :(得分:1)

您是否在网络应用程序中使用second level cache?如果是这样,您的选择是:

  1. 使用群集缓存(请参阅上面的选项链接),并在本地应用程序对数据库进行更改时远程使其无效。
  2. 在您必须调用的Web应用程序中(手动或通过“本地”应用程序)公开API(Web服务甚至基本URL)以使缓存无效。基本上,与#1相同,但更多工作:-)所以只有在#1不适用时使用。
  3. 如果你使用二级缓存但遇到了你所描述的问题,那就意味着你要花太多时间来坚持你的会话。会话应 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会话?您确定修改数据库的其他应用程序是否真的提交了更改?