Spring 如果我使用复合键,启动 JPA 如何处理 @Id
Spring Boot JPA how to handle @Id if I use composite key
我是 运行 一个 Spring 引导应用程序,我使用的是 JPA。我正在使用 Postgresql 作为数据库。
我从 api 中获取一些数据,其中每一行都没有 ID。所以我必须使用@Id 和@GeneratedValue。但我的问题是,当我再次请求此数据时,我可能会再次获得完全相同的行或其中的一些行。我可以制作一个由 3 列组成的复合键,但是我该如何处理我想保留的 Id(自动生成的值)。如果我理解正确,我不能同时使用复合主键和生成@Id?
这个问题的一个扩展是有时每行中的一列都会更新。然后我想只更新此列而不是在数据库中创建新行。
我可以修改查询,检查三列(复合键)是否已经存在,然后如果有任何更改或缺少行,我会更新该行,只需保存即可。还是我错过了他们的任何其他选项,所以我不必自己编写任何查询?
你说得对,你必须决定是要使用单个自动生成的 Id 还是复合键,不能同时使用两者。而且,如果您的 API 无法处理单个 ID,那么您最好按照您在扩展问题中的想法去做;创建复合键并在更新行时检查与您的三个值匹配的行。
我是 运行 一个 Spring 引导应用程序,我使用的是 JPA。我正在使用 Postgresql 作为数据库。
我从 api 中获取一些数据,其中每一行都没有 ID。所以我必须使用@Id 和@GeneratedValue。但我的问题是,当我再次请求此数据时,我可能会再次获得完全相同的行或其中的一些行。我可以制作一个由 3 列组成的复合键,但是我该如何处理我想保留的 Id(自动生成的值)。如果我理解正确,我不能同时使用复合主键和生成@Id?
这个问题的一个扩展是有时每行中的一列都会更新。然后我想只更新此列而不是在数据库中创建新行。 我可以修改查询,检查三列(复合键)是否已经存在,然后如果有任何更改或缺少行,我会更新该行,只需保存即可。还是我错过了他们的任何其他选项,所以我不必自己编写任何查询?
你说得对,你必须决定是要使用单个自动生成的 Id 还是复合键,不能同时使用两者。而且,如果您的 API 无法处理单个 ID,那么您最好按照您在扩展问题中的想法去做;创建复合键并在更新行时检查与您的三个值匹配的行。