SptringDataJpa的Transactional注解疑惑
过程是这样:单元测试test
→ 调用service
→ 调用repository
test层
service层
repository层
请问大佬们,如何解释日志里打印的3个update
记录?特别是它们执行的顺序(第二个update
语句,优先set name
的,应该就是repository
里面我手写的update
方法)。
1。本来打算3个层,都使用Transactional
注解的,因为既然Transactional
默认是继承上级事务,那最终其实只有一个事务在执行,但是,如果3个层都使用Transactional
,会出现事务回滚。
2。搜索了一些文章,说因为hibernate
的数据状态,所以查询出来的数据,set
了某个字段后,在事务结束的时候会自动执行update
,但是我怎么也想不明白,第三个update
日志,是怎么来的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个得了解一下
hibernate
的事务机制了,具体可以参考下这篇文章 How Spring and JPA / Hibernate Transaction Management works。在单元测试上使用事务注解的作用是:单元测试结束后回滚事务。
所以:单元测试后是否回滚事务仅仅取决于是否在测试类或方法中添加事件注解,与serivce及repository中是否启用事务没有关系。
第二个问题没有研究过,建议启用debug模式在被测试的代码上打断点,然后采用步进的方式调试代码。结合控制台的SQL语句,大概就能明白执行的顺序了。