事务不生效的原因:
@Transactional
1:数据库引擎是否支持
InnoDB支持事务,MyIsam不支持。查看表是什么引擎
1 show create table pms_product;
2:没有被 Spring 管理
1 // @Service
2 public class OrderServiceImpl implements OrderService {
3
4 @Transactional
5 public void updateOrder(Order order) {
6 // update order
7 }
8
9 }
如果此时把 @Service 注解注释掉,这个类就不会被加载成一个 Bean,那这个类就不会被 Spring 管理了,事务自然就失效了。
3:方法不是 public 的
4:异常被吃了
1 @Override
2 @Transactional
3 public void testTransaction() {
4 log.info("测试事务。修改id=1的值");
5 PmsProduct pmsProduct = baseMapper.selectById(1L);
6 pmsProduct.setProCreateTime(LocalDateTime.now());
7 baseMapper.updateById(pmsProduct);
8 try {
9 int j = 1/0;
10 }catch (Exception e){
11 e.printStackTrace();
12 }
13 }
把异常吃掉,又不抛出来。事务无法回滚。
来源:https://www.cnblogs.com/bulrush/p/12160760.html