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

Posted

技术标签:

【中文标题】使用 JAVA UUID 作为主键时 H2 内存数据库错误“数据转换错误转换”【英文标题】:H2 in-memory database error “Data conversion error converting” when using JAVA UUID as primary key 【发布时间】:2018-03-02 14:36:56 【问题描述】:

将 Java 生成的 UUID 与 Spring Data 和 uui2 一起使用时出现以下错误。与这里的其他问题不同的是,UUID 是由 Java 生成的,而不是由数据库生成的。

Caused by: org.h2.jdbc.JdbcSQLException: 
Data conversion error converting "X'aced00057372000e6a....72c41427e' 
(MYTABLE: FIELDID UUID NOT NULL)"; SQL statement:
insert into mytable (field1, filed2, fieldid) values (?, ?, ?) 
-- (?1, ?2, ?3) [22018-192]

我在 pom.xml 上有 1.4.192 H2 版本。

【问题讨论】:

【参考方案1】:

H2 数据库在 1.4.193 版本中获得了以下新功能

PR #353: Add support for converting JAVA_OBJECT to UUID
http://www.h2database.com/html/changelog.html

所以,我只需将我在 pom.xml 上的 H2 版本更新为 1.4.193 或专业版即可解决我的问题。

【讨论】:

以上是关于使用 JAVA UUID 作为主键时 H2 内存数据库错误“数据转换错误转换”的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UUID 作为 HSQLDB 列的默认值

Java UUID是不是区分大小写

Java UUID是不是区分大小写

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

java UUID.randomUUID()自动生成主键作为Id或文件路径

为什么分布式数据库中不使用uuid作为主键?