2013-01-22 216 views
1

我正在使用春季3與休眠3.5.4交易管理春季3 - 休眠3.5

1-我想在交易中創建一個對象,並將其保存到數據庫(成功通過)。 2-我想更新該對象中的某些字段(同一對象),並在另一個事務中更新數據庫中的數據(這裏是問題)。

問題是,將對象成功保存在第一個事務中,但不會在第二個事務中的數據庫中更新它。

這裏是代碼示例:

public String entry(String str){ 
    Bill b = create(str); 
    b = update(b); 
    b = updateAgain(b); 

    return "DONE"; 
} 

@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) 
public Bill create(String num){ 
    Bill bill = new Bill(); 
    bill.setBillNumber(num); 
    baseDao.saveObject(bill); 
    return bill; 
} 

@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) 
public Bill update(Bill bill){ 
    bill.setRetailAmount(152.0); 
    baseDao.saveObject(bill); 
    return bill; 
} 

注:我不想把@Transactional註釋的方法「項」。

感謝,

回答

1

註解不會生效,如果叫上同一個類中的方法。 AOP不能通過代理截取。在課堂外移動你的入學方法。

編輯:Spring通過註釋驅動的AOP與代理或子分類來實現事務註釋。啓用代理時,代理在本地方法調用中不在圖片中。這blog post有一個很好的解釋與圖片。

+0

謝謝卡布拉姆, 它的工作,但我不明白你說通過代理攔截器,你能解釋一下嗎? –

+0

這是一個很好的答案。我不知道這是真的。 –

+0

爲了讓這個工作,你可以使用編程事務而不是聲明式。 –