如何在 h2 数据库中插入特定的 UUID?

Posted

技术标签:

【中文标题】如何在 h2 数据库中插入特定的 UUID?【英文标题】:How to insert a specific UUID in h2 database? 【发布时间】:2016-04-08 08:03:06 【问题描述】:

我需要在我的数据库中插入一些默认数据。我正在使用带有 Flyway 集成的 Spring Boot。对于测试,我使用 H2。生产环境将使用 mysql

我已经制作了单独的 Flyway 迁移脚本,因此我可以将数据库特定的东西用于默认数据(创建表是在一个通用脚本中完成的)。

对于 MySQL,我有这样的东西:

INSERT INTO survey_definition (id, name, period) 
VALUES (0x2D1EBC5B7D2741979CF0E84451C5BBB1, 'disease-activity', 'P1M');

我怎样才能对 H2 做同样的事情?

我只找到了 RANDOM_UUID() 函数,它可以工作,但我需要使用已知的 UUID,因为我在进一步的语句中将它用作外键。

【问题讨论】:

使用与生产不同的数据库进行测试似乎是一场灾难。除非您先对其进行测试,否则如何确保您的代码在 MySQL 上正确运行? 【参考方案1】:

最好使用适用于所有数据库的语法。我认为大多数数据库不支持0x 语法。对于 H2,这将起作用:

INSERT INTO survey_definition (id, name, period) 
VALUES ('2D1EBC5B7D2741979CF0E84451C5BBB1', 'disease-activity', 'P1M');

但是要获得跨数据库的语法,你可能需要创建一个用户定义的函数(例如uuid)然后使用:

INSERT INTO survey_definition (id, name, period) 
VALUES (uuid('2D1EBC5B7D2741979CF0E84451C5BBB1'), 'disease-activity', 'P1M');

【讨论】:

你能更详细地解释一下用户定义的函数吗?如何创建它以及它的外观如何? 这取决于数据库。对于 H2,它将有一个参数,并返回该参数。

以上是关于如何在 h2 数据库中插入特定的 UUID?的主要内容,如果未能解决你的问题,请参考以下文章

在 H2 数据库引擎中为 UUID 类型的主键列指定默认值?

使用 Spring JPA 在 H2 和 Sql Server 中持久化的 Java UUID

使用JAVA UUID作为主键时H2内存数据库错误“数据转换错误转换”

使用 JAVA UUID 作为主键时 H2 内存数据库错误“数据转换错误转换”

如何使用nodejs pg-promise库将带有uuid数组的记录插入pg表

如何使用反射 API 将数据插入 H2 数据库