Java:Hibernate在DataBase中看不到变化

我有两个不同的应用程序共享相同的数据库。 问题是,当我有一个应用程序更改数据库中的某些内容时,另一个不会更新。

我试图做一个session.flush()但它没有奏效。 唯一的办法是关闭整个会话并重新创建它,但当然这需要很长时间。


简短的回答:每次你想显示一些对象时,发出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本身并不能解决任何问题。 这是你在系统架构中应该考虑的事情。


如果我理解正确,这是在您的方案中发生的情况:

  • app1启动一个事务
  • app2(开始和)提交另一个事务
  • app1希望能够读取app2所做的更改
  • 如果是这种情况,你需要检查你的数据库隔离级别。

    或者,当您想要读取更新的数据时,您当然可以开始新的交易。 查看Hibernate事务文档


    我没有测试过,但Session类有一个清除所有加载实体的清除方法。 这应该强制从数据库重新加载。

    链接地址: http://www.djcxy.com/p/3881.html

    上一篇: Java: Hibernate does not see changes in DataBase

    下一篇: Identifying target machine (32 bit or 64 bit) with ClickOnce deployment