[英]When exactly does JPA REQUIRES_NEW transaction commit
在彈簧容器中,使用以下代碼:
public class A {
@Transactional
public void m1() {
...
b.m2(); // call in a new transaction
...
}
}
public class B {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void m2() {
...
}
}
什么時候為m2()
創建的交易確實提交了? 一旦m2()
調用結束,或m1()
調用結束?
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)什么時候提交? 為EJB回答它,但它似乎與JPA不一樣。
我調試了它,我只能在m1()
結束后看到m2()
對DB的影響,但這對我來說很奇怪,我在這里錯過了什么?
更新:
我將我在m1()
檢索到的實體傳遞給m2()
並從那里更新它。 所以,實際上在m2()
合並實體解決了這個問題並且Mik378答案是正確的。
從這里 :
無論您使用的是Spring Framework還是EJB,使用REQUIRES_NEW事務屬性都會產生負面結果並導致數據損壞和不一致。
無論是否存在現有事務,REQUIRES_NEW事務屬性始終在啟動方法時啟動新事務。
即使上下文中存在現有事務, REQUIRES_NEW
也會啟動新事務。
所以簡短的回答是:一旦m2()
調用結束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.