【问题标题】:Spring Data REST UPSERT StatementSpring Data REST UPSERT 语句
【发布时间】:2015-03-16 13:04:58
【问题描述】:

我有一个 Spring REST 导出 URL,我想在其中执行 UPSERT 操作。如果该行存在,它将 UPDATE ,否则它将 INSERT。我之前一直在为 CREATE 做 POST,为 UPDATE 做 PATCH,为 Delete 做 DELETE。

有什么方法可以让 URL 支持 UPSERT 操作,使用 PUT 左右?

【问题讨论】:

  • 在 REST 中,PUT 用于更新现有资源,POST 用于创建。 REST“约定”中没有指定 upsert。你能解释一下你的用例吗,你需要它做什么?
  • R4J,我想提供一个 API,如果资源不存在,则返回到 INSERT,否则执行 UPDATE。这通常需要来自客户端的 2 次调用,1 次调用 GET,另外一次调用 POST/PUT。所以这是我试图公开的一个便利 API。我在想 Handlers 是否可以像 BeforeSave 、 BeforeUpdate 一样使用?
  • 你的“PK”是什么?这是某种商业/自然 ID,还是您有自己的自动生成的 ID?如果是后者,那么重复记录就会出现问题。
  • PK 是从 MySQL 自动生成的,id 列作为数据类型 Long
  • 所以基本上表缺少唯一约束,表有列 id、user_id 和 lang_id,现在应该对 user_id 和 lang_id 有唯一约束。由于我没有带宽来添加这个约束,只能在 API 中处理。为此,我需要在这里检查一下,如果存在,则不要插入另一个相同的 user_id + lang_id 组合

标签: spring spring-data spring-data-jpa spring-data-rest


【解决方案1】:

PUT 方法调用资源创建操作,如果您正在更新的资源不存在,从 this code snippet on PUT method 可以明显看出。

【讨论】:

  • 我试过了,当 {id} 没有找到行并且生成的新行具有序列创建的新 id 时,它插入了新记录。如果 {id } 是企业/自然 ID,我知道它会解决重复记录问题。
猜你喜欢
  • 2020-05-06
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2018-08-27
  • 2014-10-06
  • 2021-04-18
相关资源
最近更新 更多