【问题标题】:Saving an POJO to DB using spring data jpa使用 spring data jpa 将 POJO 保存到 DB
【发布时间】: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


【解决方案1】:

如果您的数据库中存在重复数据,则在持久化数据时会抛出唯一约束异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多