2017-07-25 23 views

回答

0

您使用@Transactional註釋的地方指定了您的交易範圍。

在DAO層中使用它時,您指定每個DAO操作將在事務中提交。

在服務中使用它時,您指定每個服務操作(業務單位)都在事務中提交,因此建議這樣做,因爲通常服務方法表示應該包含在同一事務中的業務單位,因爲任何故障都應該滾動支持整個業務部門。

+0

感謝您的迴應。但是我使用這個註釋來回滾。我想在Domain和Dao層中清楚地理解這個註解的用法。我也想知道使用@Transactional註釋的優缺點 –

1

在服務層中使用@Transactional是個好習慣,因爲它管理着識別數據庫和/或業務事務範圍所需的邏輯。設計中的持久層不知道事務的範圍。

DAOs可以像其他任何bean一樣製作@Transactional,但在服務層中使用它是一種常見做法。我們傾向於這樣做,因爲我們想要分離問題。持久層只是從數據庫中來回取回/存儲數據。

例如,如果我們想從一個賬戶轉移一些金額到另一個賬戶,我們需要兩個操作,一個賬戶需要借記其他需要貸記的賬戶。所以,這些操作的範圍只有服務層而不是持久層。

持久層無法知道它在哪個事務中,例如使用方法person.updateUsername()。它應該始終運行在它自己的單獨事務中嗎?沒有辦法知道,這取決於調用它的業務邏輯。

以下幾個線程,你應該閱讀

Where does the @Transactional annotation belong?

Where should "@Transactional" be place Service Layer or DAO

0

@Transactional:有兩個不同的概念來考慮,每個都有它自己的範圍和生命週期:持久化上下文,數據庫事務 它看起來像你更多的數據庫牽引:

@Transactional註釋本身定義了單個數據庫交易的範圍上。數據庫事務發生在持久化上下文的範圍內。

持久化上下文在JPA EntityManager中,使用休眠會話在內部實現