实际示例使用Hibernate FlushMode.ALWAYS

时间:2011-08-28 15:45:42

标签: java hibernate flush

你能给我一些在Hibernate会话中使用FlushMode.ALWAYS的实际例子吗?

谢谢,

3 个答案:

答案 0 :(得分:2)

几乎总是没必要。如果在会话中进行的修改在数据库中刷新时会导致一些修改,并且Hibernate无法检测到这些修改,则可能会很有用。例如,如果对表A的某些插入导致触发器执行,如果此触发器将行插入表B,并且如果在表B上执行查询,则在这种情况下,Hibernate无法检测到之前需要刷新会话执行HQL查询。

答案 1 :(得分:2)

我遇到过需要的情况。一个案例如下: 表A对列B有唯一约束。您希望在单个事务中删除r1并插入r2,其中r1.B == r2.B.单个事务中的Hibernate重新排序导致了UniqueConstraintViolation。 FlushMode.ALWAYS在这里提供帮助,或者你可以做一个明确的session.flush()。

答案 2 :(得分:0)

<强>测试

使用@Transactional 测试的默认/隐含行为是@Rollback(true) ...使用 Hibernate ,这意味着底层数据库无法获取参与其中。无论你在表上定义了什么约束,它们都不会被评估。如果您的测试违反了一些您不了解的限制,测试将会愉快地通过。在您将@Rollback覆盖为false之前,或通过flush()FlushMode.ALWAYS强制执行同花顺。