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

Hibernate JPA使用@GeneratedValue生成主键puid始终为0如何解决

问题修复方案

以下是经过验证的几个可行解决路径,按优先级依次排查即可:

  • 修改字段类型为包装类Long
    你当前使用的是基本数据类型long,其默认值为0。JPA实现(如Hibernate)默认会通过判断主键是否为null来决定是否触发自动生成逻辑,基本类型永远不会为null,会直接将默认值0作为主键插入,不会触发数据库自增逻辑。修改后的代码如下:
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long puid;
    
  • 确认数据库表主键字段配置了自增属性
    GenerationType.IDENTITY策略完全依赖数据库层面的自增能力,需要你检查对应表的puid字段是否开启了自增配置:
    • MySQL环境需给字段添加AUTO_INCREMENT属性
    • PostgreSQL、SQL Server环境需给字段添加IDENTITY属性
      若建表时未配置该属性,即使注解配置正确,数据库也不会自动生成主键值。
  • 适配数据库类型调整主键生成策略
    若你使用的是12c之前版本的Oracle,本身不支持IDENTITY类型,需换用SEQUENCE策略并配套配置序列生成器,示例如下:
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "puid_seq")
    @SequenceGenerator(name = "puid_seq", sequenceName = "PUID_SEQUENCE", allocationSize = 1)
    private Long puid;
    
  • 检查业务代码是否提前赋值
    排查实体持久化之前的业务逻辑,是否存在手动给puid赋值为0的操作,手动赋值的优先级高于自动生成逻辑,会覆盖注解配置的生成规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:45:03