在Service方法中执行commit后,当前事务是结束了?还是?
假设:Service
方法上加普通的@Transactional
注解,隔离级别是默认的:ISOLATION_DEFAULT
,传播行为也是默认的:PROPAGATION_REQUIRED
。
service
方法中调用了一个dao
或者其他的service
执行了一个SQL:commit
。那么执行完毕后,事务还在不在?怎么理解这种情况。
这个问题的背景是我们下订单业务中要生成订单号,订单号的生成要去数据库拿序列值,这个序列拿到后,如果整个事务不提交,下一个请求就会等待。
当然,我想的比较合理的做法是:获取订单号单独成为一个service
方法,然后加@Transactional
的传播行为为PROPAGATION_NOT_SUPPORTED
,这样,获取完序列值后立马就释放了序列表那一行的锁。
但是,我就是想知道,在我的假设前提下,commit究竟做了什么?我的测试证明,加commit
是有效的。但还是没太搞清楚,大神赐教下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论