提问者:小点点

事务管理Spring3-Hibernate3.5


我正在使用带有Hibernate3.5.4的Spring 3

1-我想在事务中创建一个对象并将其保存到DB(成功通过)。2-我想更新该对象(同一对象)中的一些字段,并在另一个事务中更新DB(这就是问题)。

问题是,在第一个事务中成功地保存了对象,但在第二个事务中没有在DB更新它。

这是代码示例:

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注释放在方法“entry”上。

谢谢,


共1个答案

匿名用户

如果调用同一个类中的方法,注释将不会生效。AOP无法通过代理拦截它。将您的入口方法移到类之外。

编辑:Spring通过带有代理或子类的注释驱动AOP启用Transactional注释。当使用代理启用时,您的代理将在本地方法调用中脱离图片。这篇博文对图片有很好的解释。