有四种情况导致事务不生效
mysql引擎有问题,请确保你的表是INNODB引擎。确保数据库支持事务
@Transactional注解没有定义回滚异常,由于@Transactional的默认回滚异常是RuntimeException,所以需要手动指定一个回滚异常,如下:
@Transactional(rollbackFor = Exception.class)
最常见的问题,配置问题,重复扫描Service包,导致事务失效。
web.xml配置如下
spring.xml配置如下,记得去掉Controller层
dipatch-servlet.xml配置如下,只需要扫描controller包
最后一种是新手不理解回滚的机制,service层需要向外抛出异常。如果把整个service方法用try,catch包住了,事务管理器自然不会拦截。