REQUIRES_NEW
被回滾所有交易:Grails的/春REQUIRES_NEW回滾外部事務
我有一個方法,一個bean也有一些方法標記@Transactional(propagation = REQUIRED)
內標@Transactional(propagation = REQUIRES_NEW)
。這些方法從不互相呼叫。它們是從另一個bean單獨調用的。但是,如果我的方法被標記爲REQUIRES_NEW
失敗,它會回滾整個事務,包括標記爲REQUIRED
(這是有問題的)的方法。
我的理解是,如果以這種方式考慮,Spring AOP將有機會攔截REQUIRES_NEW
方法並啓動新的邏輯事務。
總的想法是這樣的:
@Transactional
class TransactionalBean{
@Transactional(propagation = REQUIRED)
public void methodA(){ //do transactional work }
@Transactional(propagation = REQUIRES_NEW)
public void methodB(){ //do transactional work }
}
然後調用豆看起來像這樣:
@Transactional
class CallingBean{
@Autowired
TransactionalBean
public void doWork(){
TransactionalBean.methodA();
TransactionalBean.methodB();
}
}
所以,如果方法A和B成功,一切都很好。但是,當方法B失敗時,方法A中的工作會回滾。我的理解是,當methodB()
被調用,它'應該'被AOP截獲並開始一個新的事務並掛起另一個事務,但它不起作用。我該如何解決?我正在使用Grails 2.5,休眠,JPA
最好的辦法來解決它是升級。 2.5不再維護。 –
不幸的是,我被困在這個項目的2.5上。這是框架問題嗎? – dirtbiker