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

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

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

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

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

查看回复

相关问答