奇怪的休眠缓存问题

Chr*_*rra 2 java spring hibernate

我们在 Spring MVC 2.0 中使用 Hibernate 3.1。当直接在数据库上更新数据(而不是在应用程序中)时,就会出现我们的问题。我们使用过滤器根据订单是打开还是关闭来过滤结果集合。如果我们更改要关闭的 DB 上的订单,过滤器将返回正确的列表,但是,对象的状态不会改变。

  • 我们没有启用二级缓存或查询缓存。
  • 从数据库中检索集合是通过 Hibernate 的 Session.createQuery 进行的。
  • 此外,我们连接了一个 SessionFactory,并在整个应用程序中使用了一个 Session。

对象显示正确状态结果的唯一时间是在服务器重新启动时——我们不希望定期这样做。

Bri*_*ing 5

Session 总是有一个“第一级”缓存,所以如果你使用一个 Session,你读到的所有内容都将被缓存。Hibernate 将针对数据库执行查询,但是在构建对象时,它会检查会话缓存以避免构建新对象,因此不会刷新数据库中更改的任何列。如果您关闭它并获得一个新的会话,它将在下一次查询时从数据库中读取完整的对象。