1、当方法非public修饰或者使用static修饰时,事务失效
@Transactional
public static void test() {
}
@Transactional
private void test() {
}
上述两种情况在编译时即可发现;
2、使用try catch,事务失效
@Transactional
public void test() {
try {
//sql
int i = 1 / 0;
} catch (Exception e) {
}
}
由于事务需要异常触发,所以不能把异常直接吞掉
3、同一个类,A方法调用B方法,A无事务,B有事务,B中事务失效
public class Test {
public void A() {
B();
}
@Transactional
public void B() {
}
}
上述情况B中事务直接失效,只能在A方法上加事务注解