您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Spring @Transactional批注:自我调用

Spring @Transactional批注:自我调用

我不明白的是,为什么人们说自我调用会破坏交易?

我从未听说过自调用会中断事务。我所知道的是,自调用不会启动新事务,您已经提到了原因。

在代理模式(认设置)下,仅拦截通过代理传入的外部方法调用。这意味着,实际上,即使被调用方法标有@Transactional,自调用实际上也不会导致运行时实际事务在目标对象中调用目标对象的另一种方法

如果@Transaction从中删除注释saveAB(),则将观察该方法saveA()saveB()即使使用注释,也不会在事务下运行@Transactional。但是,如果您在类外部调用saveA()saveB()从类外部调用,它将按预期在事务下运行。这就是为什么人们建议对自调用要谨慎的原因。

public void saveAB(A a, B b)
{
    saveA(a);
    saveB(b);
}

@Transactional
public void saveA(A a)
{
    dao.saveA(a);
}

@Transactional
public void saveB(B b)
{
    dao.saveB(b);
}

我认为,自行调用任何公共方法都是一个坏主意。

Java 2022/1/1 18:14:19 有526人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶