【发布时间】:2021-09-19 02:23:04
【问题描述】:
据我所知,Spring Data JPA 存储库中的 save() 方法从表中获取相关记录,检查数据库中是否存在此类记录,如果存在则更新记录,否则将更新记录已插入。
我的问题是,如果我使用findById() 方法检索记录,对检索到的记录执行某些操作,然后调用save() 方法,Spring Data JPA 会再次获取记录,还是已经获取记录附加到实体管理器,它会更新它吗?
【问题讨论】:
-
保存不会做这样的事情,因此您的理解是错误的。它将检查是否设置了 id,如果是,它将调用
merge,如果没有,它将调用persist,它不会检索任何内容。如果您执行findById并进行更改,则无需调用save,因为它已被管理并附加到EntityManager,更改会自动保留。 -
感谢您的回复。当我打开 show-sql 属性时,日志会在调用 save 方法时显示一条 select 语句和一条 insert 语句。它是如何工作的?
-
这是 JPA 的
merge行为,但这与 Spring Data JPA 无关,因为没有它也会发生这种情况。所以 Spring Data JPA 什么也得不到。
标签: spring-boot hibernate jpa spring-data-jpa spring-data