1 当方法被标记为@Transactional时,但是该方法是非公有方法时,@Transactional注解会失效。
@Service
public class UserService {
@Transactional
private void doSomething() {
// ...
}
}
2 当方法被标记为@Transactional时,但是该方法是静态方法时,@Transactional注解会失效。
@Service
public class UserService {
@Transactional
public static void doSomething() {
// ...
}
}
3 当方法被标记为@Transactional时,但是该方法是被同一个类中的另一个方法调用时,@Transactional注解会失效。
例如:
@Service
public class UserService {
@Transactional
public void doSomething() {
doSomethingElse();
}
public void doSomethingElse() {
// ...
}
}
4.当方法被标记为@Transactional时,但是该方法是被另一个类中的方法调用时,@Transactional注解会失效。
例如:
@Service
public class UserService {
@Transactional
public void doSomething() {
// ...
}
}
@Service
public class AnotherService {
@Autowired
private UserService userService;
public void doSomethingElse() {
userService.doSomething();
}
}
以上是一些可能导致@Transactional注解失效的场景,需要注意避免。