我有两个共享同一个数据库的不同应用程序。问题是当我有一个应用程序更改数据库中的某些内容时,另一个应用程序不会更新。
我尝试制作一个 session.flush()
但它没有用。唯一的方法是关闭整个 session 并重新创建它,但这当然需要很长时间。
最佳答案
简答:每次你想显示某个对象时发出一个session.refresh(obj)
。它将强制 Hibernate 转到数据库。另一种解决方案是使用 StatelessSession
,它不会缓存任何内容(甚至一级缓存也不缓存),每次需要记录时都会强制您的应用程序访问数据库:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-statelesssession
当然,如果这太多了,那么您可以考虑使用某种锁定(悲观或乐观):
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html#transactions-optimistic
但实际上,如果您有两个不同的并发系统使用相同的记录,那么 Hibernate 自己无法解决任何问题。这是您在系统架构中应该考虑的事情。
关于Java:Hibernate 看不到 DataBase 的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4313623/