首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate中带注释的字符串主键自动生成

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

Stack Overflow用户
提问于 2018-08-24 14:09:56
回答 2查看 11.3K关注 0票数 4

我是Spring Boot的新手,在模型中有一个Id (主键),它是字符串,我需要在保存新实体时自动生成它。

代码语言:javascript
复制
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;
private String name;
private String description;

但是,当我保存一个新的实体时,我得到这个错误。

代码语言:javascript
复制
"message": "Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.IdentifierGenerationException: 

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

EN

回答 2

Stack Overflow用户

发布于 2018-08-24 14:25:00

@GeneratedValue(策略= GenerationType.AUTO)这将根据底层DB产生标识列、序列或表中的任何一个。

如果您看这里,您会注意到所有这些生成的If都是long、short或int类型,而不是String类型。

如果希望将Id作为字符串生成,则使用generator="uuid“,如下所示

代码语言:javascript
复制
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;
票数 6
EN

Stack Overflow用户

发布于 2018-08-24 14:23:01

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

为了使其正常工作,您需要将@GeneratedValue注释更改为使用generator而不是strategy,还需要添加一个命名生成器和指向策略的@GenericGenerator注释。

例如,假设您希望为表生成自动生成的UUID作为PKs,您的代码将如下所示:

代码语言:javascript
复制
@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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51998450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档