2011-04-15 69 views
0

Spring Data JPA reference(以前Hades),在庫實例 是通過默認的事務春數據JPA /閻王交易行爲

CRUD方法。

如果一個方法覆蓋多於一個儲存庫,例如:

@Transactional 
public void addRoleToAllUsers(String roleName) { 
    Role role = roleRepository.findByName(roleName); 
    for (User user : userRepository.readAll()) { 
     user.addRole(role); 
     userRepository.save(user); 
    } 
} 

基準狀態

在 庫事務配置將被然後忽略如 外事務配置 確定使用的實際值。

行爲內部交易被忽略在默認彈簧交易行爲或實際明確春天JPA的數據處理?

回答

1

這是一個默認行爲。

正如你所看到的,JpaRepository方法被註解爲@Transactional在默認情況下(REQUIRED)傳播,它是爲傳播類型,一種正常的行爲(見10.5.7 Transaction propagation)。

+0

參考狀態「交易將被忽略」似乎是誤導。 – 2011-04-15 14:21:44

+1

@CK:聲音過於簡單化,但對我來說很清晰 - 存儲庫方法中的「@ Transactional」不會在另一個事務中調用時創建事務。 – axtavt 2011-04-15 14:40:27

1

@TransactionalJpaRepository /實現類將導致這些方法默認參與外部事務。所以如果你認爲「忽略」是一個誤導性的詞,可以自由地爲它打開一個JIRA(我認爲它在某種程度上;))。

如果您想更改CRUD方法的事務配置,只需在您的具體存儲庫接口中重新聲明CRUD方法,然後將@Transactional添加到包含您想要的配置的配置中即可。詳情請參閱reference documentation