我对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
。
答案 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)