我是Spring Boot的新手,在模型中有一个Id (主键),它是字符串,我需要在保存新实体时自动生成它。
@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。
发布于 2018-08-24 14:25:00
@GeneratedValue(策略= GenerationType.AUTO)这将根据底层DB产生标识列、序列或表中的任何一个。
如果您看这里,您会注意到所有这些生成的If都是long、short或int类型,而不是String类型。
如果希望将Id作为字符串生成,则使用generator="uuid“,如下所示
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;发布于 2018-08-24 14:23:01
当您尝试将auto生成的值与String字段一起使用时,这对您不起作用。
为了使其正常工作,您需要将@GeneratedValue注释更改为使用generator而不是strategy,还需要添加一个命名生成器和指向策略的@GenericGenerator注释。
例如,假设您希望为表生成自动生成的UUID作为PKs,您的代码将如下所示:
@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
https://stackoverflow.com/questions/51998450
复制相似问题