Spring Boot 2.7中Hibernate生成UUID字段报错求助
解决非主键UUID字段自动生成的问题
针对你遇到的not-null property references a null or transient value错误,说明Hibernate在持久化实体时,campaignId字段没有被自动生成值,导致违反了nullable=false的约束。下面给你几种可行的解决办法:
调整Hibernate注解配置
非主键字段使用UUID生成器时,需要确保Hibernate明确触发值的生成。可以修改注解配置如下:@GenericGenerator(name = "campaignIdGenerator", strategy = "org.hibernate.id.UUIDGenerator") @GeneratedValue(generator = "campaignIdGenerator") @Column(name = "campaignId", updatable = false, nullable = false, columnDefinition = "CHAR(36)") @Type(type = "org.hibernate.type.UUIDCharType") private UUID campaignId;这里明确指定生成器名称,并通过
columnDefinition匹配MySQL的字段类型,确保Hibernate在插入时自动生成UUID值。在实体构造函数中初始化UUID
如果你不想依赖Hibernate的生成器,也可以在实体的无参构造函数中直接生成UUID,这样创建实体对象时就会自动赋值:public YourEntity() { this.campaignId = UUID.randomUUID(); }这种方式简单直接,能彻底避免字段为null的问题,生成的UUID同样保证唯一性。
检查数据库字段类型
确保MySQL中campaignId字段的类型是CHAR(36)或者VARCHAR(36),和实体类中@Type指定的UUIDCharType对应,避免因类型不匹配导致的隐性问题。
内容的提问来源于stack exchange,提问作者ksernow
相关产品推荐
相关产品推荐

