2016-04-28 41 views
0

爲什麼我們需要在Springdata中添加註解@Transactional來更新函數,而我們不需要它來創建,刪除,刪除?爲什麼我們需要在springdata中添加批註@Transactional來更新函數?

下面是一個例子。

@Service 
public class PersonService 
{ 
    @Autowired 
    private PersonRepository personRepository; 

    @Transactional 
    public int updateEmail(String email,Integer id) 
    { 
     return personRepository.updateEmail(email, id); 
    } 

} 

回答

0

從官方docs

在庫實例CRUD方法是通過默認的事務。對於讀取操作,事務配置readOnly標誌設置爲true,所有其他配置使用普通的@Transactional,以便應用默認的事務配置。

因此,我們可以得出結論,數據操作(例如deletedeleteAllsave等)的所有默認方法默認使用@Transactional。我們可以看JpaRepository默認執行SimpleJpaRepository來確認。接下來的事情是,當你編寫自己的數據操作方法(並且我可以看到你創建了一個更新Person類的電子郵件的方法)時,它們默認爲@Transactional(readOnly = true),因此這樣的方法不能影響現有的數據。所以我們需要使用@Transactional註釋來註釋它們。