You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot+PostgreSQL主键设自增仍报front_menu_id非空约束错误

问题排查与解决方案

这个报错的核心原因是数据库表的front_menu_id字段没有配置自增属性,仅在实体类注解配置自增不会生效,需要同时完成数据库侧和框架侧的配置,按以下步骤排查修复即可:

步骤1:修复数据库表主键自增配置

你此前都是手动录入主键,建表时大概率没有给主键字段设置自增规则,PostgreSQL的自增配置和MySQL不同,按以下操作调整:

  1. 先查询当前表的最大主键值,避免后续自增和已有的主键冲突:
SELECT MAX(front_menu_id) FROM front_menu_table;

记下来查询到的最大值,假设为max_id,后续自增起始值设为max_id + 1即可。
2. 根据你的PostgreSQL版本选择对应配置方式:

情况A:PostgreSQL 10及以上版本(推荐)

直接将字段设置为身份列,适配自增需求:

-- 手动传主键时用传入值,不传则自增,适配你之前手动录入主键的场景
ALTER TABLE front_menu_table ALTER COLUMN front_menu_id ADD GENERATED BY DEFAULT AS IDENTITY;
-- 调整自增起始值,替换下面的[max_id + 1]为你第一步查出来的数值加1
ALTER SEQUENCE front_menu_table_front_menu_id_seq RESTART WITH [max_id + 1];

情况B:PostgreSQL 10以下版本

手动创建序列并绑定到主键字段的默认值:

-- 创建序列,替换[max_id + 1]为你第一步查出来的数值加1
CREATE SEQUENCE front_menu_table_front_menu_id_seq START WITH [max_id + 1];
-- 绑定序列到主键默认值
ALTER TABLE front_menu_table ALTER COLUMN front_menu_id SET DEFAULT nextval('front_menu_table_front_menu_id_seq');

步骤2:确认MyBatis-Plus主键策略没有冲突

如果数据库配置完还是报错,检查框架全局配置是否覆盖了实体类的主键注解:

  1. 查看application.yml/application.properties配置文件,确认没有全局配置主键策略覆盖注解,或者全局策略设为auto:
mybatis-plus:
  global-config:
    db-config:
      # 要么删掉这行配置优先使用实体类@TableId的配置,要么设为auto
      id-type: auto
  1. 查看MyBatis-Plus配置类,确认没有代码层面设置全局主键类型为非auto的值,如果有则调整或者删除。

额外说明

你之前手动录入主键导致的序号混乱问题,只要按步骤1调整好自增序列的起始值,就不会对后续新增操作产生任何影响。

内容的提问来源于stack exchange,提问作者Showen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:45:03