【发布时间】: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