我正在编程一个JSP/JSF Web应用程序并且当前使用的是Hibernate(和MySQL)库。当我使用正在运行的应用程序更新数据时,一切正常。休眠:必须重新启动Java应用程序才能实现数据
例子:我修改客户信息
虽然如果我手动更改数据或手动添加在MySQL的条目,则变化不会对我的申请方有效。
问题:每一次,我都要重新加载应用程序。
任何人都可以理解我的问题并找到一个快速解决方案?
我正在编程一个JSP/JSF Web应用程序并且当前使用的是Hibernate(和MySQL)库。当我使用正在运行的应用程序更新数据时,一切正常。休眠:必须重新启动Java应用程序才能实现数据
例子:我修改客户信息
虽然如果我手动更改数据或手动添加在MySQL的条目,则变化不会对我的申请方有效。
问题:每一次,我都要重新加载应用程序。
任何人都可以理解我的问题并找到一个快速解决方案?
可能Hiberante缓存已启用,需要重新加载行/对象。
或者您应该通过Hibernate更新/插入数据。
您是否在您的Web应用程序中使用了second level cache?如果是这样,你的选择是:
如果你不使用二级缓存,但遇到了你所描述的问题,这意味着你持有到您的会话的时间太长了。会议应 generally be short-lived。
谢谢你的信息。我想我没有在这个应用程序中使用任何缓存。例如,当我显示不同的付款时,它应该只在我重新加载页面时重新加载数据... Session session = SessionFactoryUtil.getInstance()。openSession(); (“SELECT * FROM factures INNER JOIN paiements ON paiements.id_facture = factures.id_facture WHERE factures.id_membre =”+ this.membre.getIdMembre()); query.addEntity(Paiements.class).addEntity(Factures.class); List paiements = query.list(); session.close(); – wiooz 2009-12-11 20:26:05
您是否在等待您的页面(会话等)中查询结果?启用hibernate SQL调试(http://docs.jboss.org/hibernate/stable/core/reference/en/html/session-configuration.html#configuration-optional),并检查每次点击页面时确实执行了查询。 – ChssPly76 2009-12-11 20:40:28
我不确定你是如何配置你的Hibernate会话的,但是一些配置要求你除了关闭会话外还要刷新会话(例如,能够从底层JDBC连接断开到DB的会话)。因此,在一个评论回复,你说你结束工作,session.close();
- 尝试这样做:
session.flush();
session.close();
代替,看看是否可以修正你所看到的。
否则,我会检查您是否确实没有使用二级缓存......在您的休眠配置中明确禁用它,将hibernate.cache.provider_class
设置为org.hibernate.cache.NoCacheProvider
。
OP运行查询;没有什么可刷新的。以同样的精神,查询必须明确标记为可缓存;如果没有配置二级缓存提供程序,则不会有所作为。 – ChssPly76 2009-12-11 21:21:59
试试这个:
Session session = SessionFactoryUtil.getInstance().openSession();
session.clear();
另外,你可以明确地使用StatelessSession,它没有缓存。详细信息可以在这里找到:
https://www.hibernate.org/hib_docs/v3/api/org/hibernate/StatelessSession.html
阅读其他的答案,这真的奇怪的意见。 您是否可以确认每次调用页面时至少关闭一次Hibernate会话?你确定修改数据库的其他应用程序确实提交了更改吗?
那么问题是我们有一个本地应用程序和一个Web应用程序使用相同的数据库。如果我使用软件应用程序对数据库进行了更改,则仅当页面重新加载时才能在Web应用程序内更新数据。 (整个应用程序必须重新加载。)我没有发现任何配置,我做了abot休眠缓存。 – wiooz 2009-12-11 20:00:50