【发布时间】:2016-11-23 14:07:01
【问题描述】:
当调用 Spring 数据中的从 CrudRepository 保存时,它要么更新数据库中的现有记录,要么在该记录的 id 为空/空白时创建新记录。
我有一个应用程序在主键为String 的表中插入和更新记录,因此不会递增,但该列中存储的值是Integer。因此,应用程序获取max(last_insert_id(string)) 并为新记录递增并将其保存到数据库中。还有另一个应用程序正在执行相同的过程,在某些情况下,数据被覆盖。
所以当使用CrudRepository 时,如果我只能插入记录而不是更新它,那应该有助于解决问题。如何使用CrudRepository 只创建一条新记录,是否有任何内置支持?
【问题讨论】:
-
您知道当对同一个数据库使用多个应用程序时,确定主键的策略很糟糕吗?
-
@M.Deinum 我知道这是一个糟糕的策略,但这是我继承的东西,无法做出改变,因为有很多其他应用程序在使用它,所以我现在必须忍受它.
-
使用它而不是使用 JPA(不一定是 Spring Data JPA)。为 ids 创建一个自定义生成器,其中包含您现在正在执行的逻辑。这样,应用程序中的检测逻辑将(更)可靠地工作,而不是自己在应用程序中进行。
标签: java mysql spring spring-boot spring-data