@Transactional
在3210情況下,使用JPA
即
@Transactional
註解應放在周圍是分不開的所有操作。
所以我們來舉例:
我們有2個型號的即Country
和City
。 的Country
和City
模型關係映射就像是一個國家或地區可以有多個城市因此映射像,
@OneToMany(fetch = FetchType.LAZY, mappedBy="country")
private Set<City> cities;
這裏國家映射到多個城市通過延遲加載取得他們。 因此,當我們從數據庫中檢索Country對象時,@Transactinal
的作用是,我們將獲取Country對象的所有數據,但不會獲取Set of cities,因爲我們正在提取城市LAZILY。
//Without @Transactional
public Country getCountry(){
Country country = countryRepository.getCountry();
//After getting Country Object connection between countryRepository and database is Closed
}
當我們要訪問的國家目標城市的設置,那麼我們將得到空值在集,因爲集合的對象創建僅這一套是不存在的數據初始化讓我們用@Transactional
即設置的值,
//with @Transactional
@Transactional
public Country getCountry(){
Country country = countryRepository.getCountry();
//below when we initialize cities using object country so that directly communicate with database and retrieve all cities from database this happens just because of @Transactinal
Object object = country.getCities().size();
}
所以基本上@Transactional
是服務可以使單個事務多個呼叫,而不關閉與終點連接。
希望這對你有幫助。
@ Transactional註解有兩個包:'javax.transaction'和'org.springframework.transaction.annotation.Transactional',所以我猜想有JTA/JPA事務處理和Spring事務處理或Spring實現JPA/JTA交易處理 – 2014-10-28 14:45:12
感謝您的信息。幕後是「org.springframework.transaction.annotation.Transactional」Spring自己的事務機制或使用JPA還是JTA? – CuriousMind 2014-10-28 15:03:37
什麼是您的上下文配置?你使用什麼交易管理器? – 2014-10-28 15:41:41