2016-04-15 32 views
2

使用彈簧數據時,可以擴展CrudRepositoryCrudRepository .delete()方法是否事務性?

此存儲庫.delete()方法如何在「引擎蓋下」工作?

另外,這種方法是Transactional?如果是這種情況,在使用Spring-data時是否需要使用@Transactional註釋。

例如@Transactional需要在這裏? :

擴展CrudRepository:

public interface PersonRepository extends CrudRepository<Person, Integer> { 

} 

使用刪除服務類方法:

@Transactional 
public void deletePerson(Person person) { 

     personRepository.delete(person); 
    } 

編輯:如何將@Transactional在這裏工作?

@Transactional 
    public void deletePersonAndTable(Person person, Table table) { 

      personRepository.delete(person); 

      tableRepository.delete(Table); 

     } 
+0

定義「_extend CrudRepository_」。你的示例代碼就是這樣做的;沒有?一個事務需要對數據庫做任何事情,所以在這裏不需要'@Transactional'註釋 - 將一個以上的DAO操作分組到單個事務中是必需的。 –

+0

您是否嘗試刪除'@ Transactional'並查看事務是否已提交? –

+0

@BoristheSpider剛剛展示了我的Repository如何擴展CrudRepository?您能否定義您的意思:「將多個DAO操作分組爲單個事務」?謝謝 – java123999

回答

3

您不需要自己添加@Transactional註釋。

https://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa/

此外,我們可以擺脫@Transactional註解爲 方法的春天JPA的數據倉庫實施 的CRUD方法已經使用@Transactional註解。

但是,如果您想執行一些應該只能一起執行或根本不執行任何操作(這是交易的目的),您應該在DOA中添加一個。

+0

謝謝,參考你的答案:你能看到我的編輯,我不知道@transactional如何在這種情況下工作? – java123999

+0

如果沒有交易,交易詮釋變爲開放交易,如果沒有交易。 –

+0

@Mr_Thorynque在一般情況下並不真實。例如,如果您不使用JTA,並且您在另一個事務資源上有一個打開的事務。 –

相關問題