Spring 下默认事务机制中@Transactional 无效的原因

Spring中 @Transactional 注解的限制
1. 同一个类中, 一个nan-transactional的方法去调用transactional的方法, 事务会失效

If you use (default) Spring Proxy AOP, then all AOP functionality provided by Spring (like @Transational) will only be taken into account if the call goes through the proxy. -- This is normally the case if the annotated method is invoked from another bean.

如果使用(默认)Spring Proxy AOP,那么Spring提供的所有AOP功能(如@Transational)只有在通过代理类调用时才被考虑。 - 如果从普通的bean调用注解方法,则通常注解是不会生效的。
  1. 在private方法上标注transactional, 事务无效
When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.
使用代理时,应将@Transactional注解应用于具有public方法。 如果使用@Transactional注解对protectedprivate或包访问权限的方法进行修饰,尽管不会引发错误,但是带注解的方法不会显示配置的事务设置。 如果需要对非public方法添加注解,请考虑使用AspectJ(见下文)。

这里有一个详细的说明 http://stackoverflow.com/questions/4396284/does-spring-transactional-attribute-work-on-a-private-method

相关博客:@Transactional 无效的解决方案

此文章来源:http://www.cnblogs.com/milton/p/6046699.html

原文地址:https://www.cnblogs.com/chenny3/p/10226129.html