也许有人也面临同样的情况?在我的项目中,我有两项服务。我使用liquebase创建数据库表。创建权限表时,我立即输入4个值有使用插入。一切都在嗡嗡作响。因此,现在在第二个服务(管理面板)中,我创建了一个允许您创建权限的apish。当我试图在权限表中创建一条记录时,其中已经有4条记录,我得到一个错误 ERROR: duplicate key value violates unique constraint "permissions_pkey"
. 如果我发出了5次请求,就会出现错误,第5次添加记录。(提前感谢)
<insert tableName="permissions">
<column name="id" value="1"/>
<column name="name" value="USERS_READ"/>
</insert>
<insert tableName="permissions">
<column name="id" value="2"/>
<column name="name" value="USERS_GET"/>
</insert>
<insert tableName="permissions">
<column name="id" value="3"/>
<column name="name" value="USERS_CREATE"/>
</insert>
<insert tableName="permissions">
<column name="id" value="4"/>
<column name="name" value="USERS_DELETE"/>
</insert>
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
2条答案
按热度按时间bxgwgixi1#
如果是标识列,则不必为
id
liquibase脚本中的列。让数据库为您计算。毕竟,这就是使用identity列的意义所在。如果以后需要在脚本中以某种方式引用id,请查找从正在使用的rdbms中获取最后插入的id的方法,通常会有如下方法
LAST_INSERTED_ID()
. 或者,使用name
列。h43kikqp2#
您正在使用生成类型标识,Map到postgres中的数据类型serial。当您想插入从管理面板创建的权限时,postgres使用一个序列,从您的描述中的1开始,id 1到4已经被手动插入使用。不要在手动插入中使用id,或者通过查询表中使用的当前最大id,在从管理面板创建的实体上显式设置id。考虑更改生成类型。