2013-05-09 48 views
1

我在我的服務層中使用了@Transactional註釋。但是爲了解決因延遲加載視圖導致的錯誤,我必須使用Open Session in View Filter。在此之後,如果不使用@Transaction本身,會話將被打開並且事務開始。那麼這是否意味着@Transactions不是必需的?如何處理交易和回滾,然後在服務層?在視圖中打開會話與@Transactional

回答

3

The javadoc解釋它:

這個過濾器使得通過當前線程,將由事務管理器被自動檢測到可用的Hibernate的會話。它適用於通過HibernateTransactionManager或JtaTransactionManager進行的服務層事務以及非事務性執行(如果已正確配置)。

注意:此過濾器在默認情況下不會刷新休眠會話,並將刷新模式設置爲FlushMode.NEVER。它假定與關注刷新的服務層事務組合使用:活動事務管理器將在讀寫事務期間臨時將刷新模式更改爲FlushMode.AUTO,並在最後將刷新模式重置爲FlushMode.NEVER的每筆交易。如果您打算在沒有事務的情況下使用此過濾器,請考慮更改默認的刷新模式(通過「flushMode」屬性)。

+0

聽不懂。這是否意味着我不應該在服務層使用@Transactional。你能否以更好的方式解釋,或者可能是一些鏈接 – 2013-05-12 04:20:57

+3

不。這意味着您應該照常編寫服務層,像往常一樣使用@Transactional。不同之處在於,即使事務已被提交,會話也將保持打開狀態。 – 2013-05-12 07:03:51