1、检查你的方法是不是 public 修饰的。
2、检查是不是同一个类中的方法调用(如a方法调用同一个类中的b方法,在b方法上加的事务)。
说明:
如a方法调用同一个类中的b方法,在b方法上加的事务,不生效,如下图:
public class AService {
public void a() {
self.b();
}
@Transactional
public void b() {
}
}
解决方案
方法一:在a方法上增加注解@Transactional
但是@Transactional范围太大
public class AService {
@Transactional
public void a() {
b();
}
public void b() {
}
}
方法二:在类中引用一个自己的service,然后在b上加注解@Transactional
a方法中调用b方法时,使用self.b()
public class AService {
private AService self;
@Override
public void setSelf(AService self) {
this.self = self;
}
public void a() {
self.b();
}
@Transactional
public void b() {
}
}
参考:Spring事务@Transactional(rollbackFor = Exception.class) 不生效_riemann_的博客-CSDN博客