交易管理春季3 - 休眠3.5

时间:2013-01-22 14:29:57

标签: java spring hibernate spring-transactions transactional

我正在使用带有hibernate 3.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;
}

注意:我不想在方法“entry”上放置@transactional注释。

谢谢,

1 个答案:

答案 0 :(得分:1)

如果在同一个类中的方法上调用,则注释不会生效。 AOP不能通过代理拦截。将您的输入方法移到课堂外。

编辑:Spring通过带有代理或子类的注释驱动的AOP启用Transactional注释。使用代理启用时,您的代理在本地方法调用中不在图片中。这个blog post对图片有很好的解释。