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

发布于 2022-09-04 18:23:43 字数 598 浏览 11 评论 0

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文