首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在spring boot上使用Hibernate生成自动UUID

如何在spring boot上使用Hibernate生成自动UUID
EN

Stack Overflow用户
提问于 2017-07-14 01:00:55
回答 4查看 36.8K关注 0票数 14

我想要实现的是生成一个UUID,它是在DB插入期间自动分配的。类似于名为" id“的主键列生成id值。

模型值如下所示:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private Long id;


@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "uuid", columnDefinition = "BINARY(16)")
private UUID uuid;

但是当DB插入完成时。"uuid“为空。

非常感谢您的帮助。如果我问了一个明显愚蠢的问题,我很抱歉。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-14 04:23:34

您可以使用诸如@PrePersist之类的事件来填充UUID字段https://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html

但是为什么不在创建对象时分配uuid = UUID.randomUUID()呢?

票数 11
EN

Stack Overflow用户

发布于 2017-07-14 01:13:08

你能试试吗?

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "id", columnDefinition = "VARCHAR(255)")
    private UUID id;
票数 23
EN

Stack Overflow用户

发布于 2020-03-15 08:24:38

这个框架有很多变化,正如在Spring Boot2.2.5和MySQL v5.7中测试的那样(应该可以在所有2.0版本中工作,但需要检查) UUID可以自动生成,如下所示

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id", insertable = false, updatable = false, nullable = false)
private UUID id;

这将以紧凑的方式以二进制格式存储它(便于存储)。如果出于某种原因,需要将UUID以人类可读(破折号分隔值)的形式存储在values字段中,可以这样做

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Type(type="uuid-char")
@Column(name="id", columnDefinition = "VARCHAR(255)", insertable = false, updatable = false, nullable = false)
private String id;

默认情况下,Hibernate使用二进制格式映射UUID,因此要更改格式,我们需要使用Type注释提供提示。

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

https://stackoverflow.com/questions/45086957

复制
相关文章

相似问题

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