Spring Hibernate处理会话中修改查询的最佳方法

时间:2014-12-16 16:04:55

标签: java spring hibernate session

问题:

如果我们必须使用诸如更新之类的修改查询,则在会话中,该更改在会话范围内不可见。使其可见的一种方法是在@Modifying批注中将修改查询设置为clearAutomatically = true。问题是,此更改将影响同一会话中的所有更改,即在该调用之前已保存的对象将无效,并且一旦事务关闭,更改将不会保留。

我的问题是:当clearAutomatically不是一个选项时,处理此问题的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

根据Hibernate会话FLUSHMODE,在执行查询之前,可以通过对Session执行flush()操作,使持久对象与持久性存储同步。刷新进程通过检测状态更改和执行SQL语句来同步数据库状态和会话状态,但它不提交事务。

默认FLUSHMODE为AUTO,描述为:

在查询执行之前,会话有时刷新,以确保查询永远不会返回失效状态。这是默认的刷新模式。如果您在查询中返回过时数据,手动刷新会话应该可以解决您的问题。