springboot事物

在SpringBoot项目中,@Transactional注解通常用于确保方法的原子性,但在使用MyISAM存储引擎的MySQL表上执行事务操作时,却发现事务并未按预期回滚,异常前的数据仍被插入数据库。本文深入探讨了这一现象背后的原因,揭示了MyISAM不支持事务的特性,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在SpringBoot 中,使用事务非常简单,只需在方法上面加入 @Transactional  注解就可以实现。也可加在类上,此时则类中所有方法都支持事务。

而当我使用下面代码时,发现事务却没有回滚,异常之前的数据仍然插入了数据库

    @RequestMapping("/percredential")
	public String perCredential(HttpServletRequest request, HttpServletResponse response) throws IOException {
		 //创建session
    	Session session = null;
  		session = (Session)entityManager.unwrap(Session.class);
  		try{
  			session.createSQLQuery("INSERT into test values(6,'1')").executeUpdate();
  			session.createSQLQuery("INSERT into test values(6,'1')").executeUpdate();
  		}catch(Exception e){  			
  			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  		}
    	return "per/perCredential/perCredential";
	}

在各种尝试之后,最后发现是mysql中的表类型是MyISAM,而MyISAM存储引擎的一个特点就是不支持事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值