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

Bas*_*que 5 uuid default h2

H2数据库中,在具有UUID数据类型列的表上,当省略该字段时,我们如何指定我们希望H2 默认生成UUID值INSERT

我知道如何生成UUID.我已经阅读了问题,如何在h2数据库中插入特定的UUID?.

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

小智 16

在 JPA/休眠中

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

@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;
Run Code Online (Sandbox Code Playgroud)

因此@Type(type = "uuid-char")VARCHAR(255)如果需要,请将您的字段设为 a (默认情况下为二进制)

@ColumnDefault("random_uuid()")为生成的表 DDL 设置默认值


Tho*_*ler 10

您可以使用内置功能RANDOM_UUID():

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

请注意,如果行数超过几百万(使用关系数据库,而不仅仅是H2),使用UUID(或任何其他随机生成的数据)作为主键将导致性能问题.

  • 例如,请参见 https://blog.programster.org/mysql-performance-when-using-uuid-for-primary-key 性能影响取决于很多因素;对于 PostgreSQL,我认为影响低于 H2 / MySQL / MS SQL Server,但恐怕到目前为止我还不明白为什么。如果 id 是有序的,则问题不会出现,例如 https://github.com/anthonynsimon/timeflake (2认同)