你能给我一些在Hibernate会话中使用FlushMode.ALWAYS的实际例子吗?
谢谢,
答案 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
强制执行同花顺。