[英]Proper way to use @Transactional on a service
我有一個服務,它使用多個DAO來完成如下工作單元。 DAO通過創建會話和提交來獲取數據/保存。 在那種情況下,當dao自己管理會話時,為什么需要在服務上進行事務處理? 如果第二個DAO中出現問題,則第一個DAO中的數據已經提交,如何解決這種情況?
@Transactional
public boolean testService(SomeObject obj){
userDao.save(obj.getUser()); // this dao gets the session from sessino factory and commits there itself.
addressDao.save(obj.getAddress()); // something fails here, and the above line has already commited the data, so the data is not Atomic.
return true;
}
通常,您不將@Transactional
放在DAO層中,而是放在服務層中。 因此,我建議您從DAO中刪除@Transactional
,並將其保留在您的服務中。
在這種情況下,如果您的任何DAO出了問題,所有內容都會回滾。
但是,這取決於您要在哪里開始和完成事務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.