默认情况下为 H2 数据库引擎中 UUID 类型的列上的每一行生成 UUID 值

Generate UUID values by default for each row on column of UUID type in H2 Database Engine

H2 database, on a table with a column of UUID data type, how do we specify that we want H2 to generate a UUID value 默认情况下,当 INSERT 省略该字段时?

我知道如何generate a UUID。 我已阅读问题,How to insert a specific UUID in h2 database?

我的问题是如何让 H2 代表我生成 UUID 值。

在SQL

你可以使用内置函数RANDOM_UUID():

create table test(id int primary key, data uuid default random_uuid());
insert into test(id) values(1);
select * from test;

请注意,如果有超过几百万行(关系数据库在一般,不仅仅是 H2)。

在JPA/Hibernate

根据@Thomas Mueller 的说法,在谷歌搜索了几个小时后,我为 JPA or Hibernate 创建了一个简单的解决方案。

@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
        name = "UUID",
        strategy = "org.hibernate.id.UUIDGenerator"
)
@Column(name = "ID", updatable = false, nullable = false)
@ColumnDefault("random_uuid()")
@Type(type = "uuid-char")
@Getter
@Setter
private UUID id;

所以 @Type(type = "uuid-char") 如果需要,可以将您的字段设置为 VARCHAR(255)(默认为二进制)

并且@ColumnDefault("random_uuid()")为生成的table DDL

设置默认值