在Service方法中执行commit后,当前事务是结束了?还是?

假设:Service方法上加普通的@Transactional注解,隔离级别是默认的:ISOLATION_DEFAULT,传播行为也是默认的:PROPAGATION_REQUIRED

service方法中调用了一个dao或者其他的service执行了一个SQL:commit。那么执行完毕后,事务还在不在?怎么理解这种情况。

这个问题的背景是我们下订单业务中要生成订单号,订单号的生成要去数据库拿序列值,这个序列拿到后,如果整个事务不提交,下一个请求就会等待。
当然,我想的比较合理的做法是:获取订单号单独成为一个service方法,然后加@Transactional的传播行为为PROPAGATION_NOT_SUPPORTED,这样,获取完序列值后立马就释放了序列表那一行的锁。

但是,我就是想知道,在我的假设前提下,commit究竟做了什么?我的测试证明,加commit是有效的。但还是没太搞清楚,大神赐教下。

阅读 6.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题