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

Spring Boot3+Java17开发时PostgreSQL报id字段非空约束错误

问题原因分析
  • JPA的UUID生成逻辑不作用于原生SQL插入:你通过@GeneratedValue(strategy = GenerationType.UUID)配置的ID生成规则,是由JPA实现(如Hibernate)在调用EntityManager持久化实体对象时自动生成UUID并填充的。但直接执行原生SQL插入语句时,JPA不会参与操作,数据库本身没有自动生成UUID的机制,导致ID字段为空,触发非空约束报错。

  • 自动创建的表未配置数据库级ID默认值:JPA自动建表时,仅会将id字段标记为非空主键,但不会为其设置数据库层面的默认值(比如PostgreSQL的uuid_generate_v4())。因此手动执行SQL插入时,必须显式提供ID值,否则数据库会将ID设为null。

可选解决方向

  1. 手动插入时显式指定UUID值:
insert into companies(id, icon, name) values ('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11', 'icon.png', 'UPV')
  1. 修改表结构添加数据库级ID默认值:
    先启用PostgreSQL的uuid扩展(首次执行):
    CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
    
    再设置ID字段默认值:
    ALTER TABLE companies ALTER COLUMN id SET DEFAULT uuid_generate_v4();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:42:08