SptringDataJpa的Transactional注解疑惑

发布于 2022-09-12 03:46:08 字数 870 浏览 17 评论 0

过程是这样:单元测试test → 调用service → 调用repository

test层
image.png

service层
image.png

repository层
image.png


请问大佬们,如何解释日志里打印的3个update记录?特别是它们执行的顺序(第二个update语句,优先set name的,应该就是repository里面我手写的update方法)。
image.png


1。本来打算3个层,都使用Transactional注解的,因为既然Transactional默认是继承上级事务,那最终其实只有一个事务在执行,但是,如果3个层都使用Transactional,会出现事务回滚。

2。搜索了一些文章,说因为hibernate的数据状态,所以查询出来的数据,set了某个字段后,在事务结束的时候会自动执行update,但是我怎么也想不明白,第三个update日志,是怎么来的。

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无畏 2022-09-19 03:46:08

这个得了解一下 hibernate 的事务机制了,具体可以参考下这篇文章 How Spring and JPA / Hibernate Transaction Management works

忘年祭陌 2022-09-19 03:46:08

在单元测试上使用事务注解的作用是:单元测试结束后回滚事务。
所以:单元测试后是否回滚事务仅仅取决于是否在测试类或方法中添加事件注解,与serivce及repository中是否启用事务没有关系。
第二个问题没有研究过,建议启用debug模式在被测试的代码上打断点,然后采用步进的方式调试代码。结合控制台的SQL语句,大概就能明白执行的顺序了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文