在Hibernate中自动生成带注释的字符串主键

时间:2018-08-24 06:09:56

标签: java hibernate auto-generate

我对Spring Boot还是很陌生,在模型中,有一个ID(主键)是String,保存新实体时需要自动生成它。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;
private String name;
private String description;

但是,保存新实体时出现此错误。

"message": "Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.IdentifierGenerationException: 

如何避免此错误并在保存新实体时自动生成id

2 个答案:

答案 0 :(得分:1)

当您尝试将auto生成的值与String字段一起使用时,这对您不起作用。

为此,您需要将@GeneratedValue注释更改为使用generator而不是strategy,并添加@GenericGenerator批注,命名生成器并仔细考虑该策略。

例如,假设您要为表生成自动生成的UUID作为PK,则代码如下:

@Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
        name = "UUID",
    strategy = "org.hibernate.id.UUIDGenerator"
    )
@Column(updatable = false, nullable = false)
private String id;

除上述内容外,您始终可以实现IdentifierGenerator来创建自己的生成器。您可以在此处查看更多信息:

How to implement a custom String sequence identifier generator with Hibernate

答案 1 :(得分:1)

@GeneratedValue(strategy = GenerationType.AUTO)这将导致标识列,序列或表中的任何一个,具体取决于基础数据库。

如果您在此处查看,您会注意到所有这些生成的ID都是long,short或int类型,而不是String类型。

如果您要生成Id作为字符串,请按以下方式使用generator =“ uuid”

(?,90)