我有一個相當古典的問題:在DAO之外訪問Lazy Collection,女巫導致LazyInitializationException。使用@ org.springframework.transaction.annotation.Transactional之外的DAO層?
這是一個乾淨和合理的解決方案,使用@Transactional
一個服務的方法,DAO之外,誰使用這些懶惰的收集?
謝謝
我有一個相當古典的問題:在DAO之外訪問Lazy Collection,女巫導致LazyInitializationException。使用@ org.springframework.transaction.annotation.Transactional之外的DAO層?
這是一個乾淨和合理的解決方案,使用@Transactional
一個服務的方法,DAO之外,誰使用這些懶惰的收集?
謝謝
是的。知道哪些任務必須是工作單位(交易)的人是服務,因爲它是「知道」業務的人。
Neuquino has the right answer,但它不是很清晰易懂,所以我會嘗試重組它:
在你需要一個交易,一個服務的方法,這就是爲什麼你@Transactional
註解服務層,而不是DAO層。 (Spring @Transactional
註釋的好處在於它獨立於底層實現,所以服務層通常不會有特定於您的持久層的代碼,例如沒有調用休眠模塊Session
或JPA EntityManager
)。當單元測試DAO時,將@Transactional
註釋放在測試方法上(您的測試是服務,而不是DAO)。
+1。事務性DAO而不是服務是一種不好的做法。 – Bozho 2010-12-16 12:04:07