1

我正在使用带有休眠 3.5.4 的 spring 3

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

问题是,在第一个事务中成功保存了对象,但在第二个事务中没有在 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”上。

谢谢,

4

1 回答 1

1

如果在同一类中的方法上调用该注解将不会生效。AOP 无法通过代理拦截它。将您的输入方法移到课堂之外。

EDIT: Spring enables the Transactional annotation via annotation-driven AOP with proxies or sub-classing. When enabled with proxies, your proxy is out of the picture in a local method call. This blog post has a good explanation with pictures.

于 2013-01-22T14:54:23.200 回答