SptringDataJpa的Transactional注解疑惑

过程是这样:单元测试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日志,是怎么来的。

阅读 3k
2 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题