簡體   English   中英

在服務上使用@Transactional的正確方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM