Heim > Fragen und Antworten > Hauptteil
假设:Service
方法上加普通的@Transactional
注解,隔离级别是默认的:ISOLATION_DEFAULT
,传播行为也是默认的:PROPAGATION_REQUIRED
。
service
方法中调用了一个dao
或者其他的service
执行了一个SQL:commit
。那么执行完毕后,事务还在不在?怎么理解这种情况。
这个问题的背景是我们下订单业务中要生成订单号,订单号的生成要去数据库拿序列值,这个序列拿到后,如果整个事务不提交,下一个请求就会等待。
当然,我想的比较合理的做法是:获取订单号单独成为一个service
方法,然后加@Transactional
的传播行为为PROPAGATION_NOT_SUPPORTED
,这样,获取完序列值后立马就释放了序列表那一行的锁。
但是,我就是想知道,在我的假设前提下,commit究竟做了什么?我的测试证明,加commit
是有效的。但还是没太搞清楚,大神赐教下。