2011-08-28 65 views

回答

2

這幾乎總是不必要的。如果在會話中進行的修改在數據庫中刷新時會導致一些修改,並且Hibernate無法檢測到這些修改,這可能會很有用。例如,如果對錶A的某些插入操作導致觸發器執行,如果此觸發器將行插入到表B中,並且對錶B執行查詢。在這種情況下,Hibernate無法檢測到在需要刷新會話之前HQL查詢被執行。

2

我遇到了需要的情況。一種情況如下: 表A對列B具有唯一約束。您想要刪除r1並在單個事務中插入r2,其中r1.B == r2.B。 Hibernate在單個事務中重新排序導致了UniqueConstraintViolation。 FlushMode.ALWAYS在這裏幫助你,或者你可以做一個明確的session.flush()。

0

測試

隨着@Transactional默認/隱含行爲測試@Rollback(true) ......隨着休眠這意味着底層數據庫不介入的。無論你在桌上定義了什麼限制,它們都不會被評估。如果你的測試違反了一些你不知道的限制,那麼測試就會順利通過。直到您覆蓋@Rollbackfalse,或通過flush()FlushMode.ALWAYS強制執行刷新。