默认情况下为 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
设置默认值
在 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