2013-01-22 160 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

为了让这个工作,你可以使用编程事务而不是声明式。 –