【问题标题】:Transaction management spring 3 - hibernate 3.5事务管理 spring 3 - hibernate 3.5
【发布时间】:2013-01-22 14:29:56
【问题描述】:

我正在使用带有休眠 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”上。

谢谢,

【问题讨论】:

    标签: java spring hibernate spring-transactions transactional


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 Kabram,它成功了,但是我不明白你所说的通过代理拦截器的内容,请你解释一下!
    • 要使其工作,您可以使用程序化事务而不是声明性。
    猜你喜欢
    • 2012-10-16
    • 2013-01-27
    • 2016-12-02
    • 2012-05-06
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多