休眠状态下事务中的延迟更新

时间:2019-04-08 07:26:06

标签: java hibernate jpa orm

在休眠事务中,我要更新一行(通过session.update(domainObject),然后使用同一表上的where条件以及其他表上的联接来执行select count(*)。我观察到的(通过日志)是更新操作发生在事务结束时,因此应该在更新查询显示错误结果之后执行的选择查询。我不明白为什么会这样。有线索吗?

1 个答案:

答案 0 :(得分:1)

执行SELECT时,持久性提供程序确定是否应刷新先前在同一事务中执行的先前CRUD操作。

这是为了确保返回的结果正确。

从理论上讲,当您进行包含对当前会话中已修改实体的引用的SELECT时,应该发生刷新。

您可能想尝试:

a)将刷新模式设置为:<property name="org.hibernate.flushMode" value="AUTO"/>。    这应该是默认设置,但是您可能会覆盖它。这是为了确保:

  

有时,在执行查询之前会刷新会话,以便   确保查询永远不会返回陈旧状态。

b)将刷新模式设置为:<property name="org.hibernate.flushMode" value="ALWAYS"/>

请谨慎对待,因为:

  

在每次查询前都会刷新会话。

c)(在最后一个查询之前)做一本手册session.flush()