【问题标题】:Hibernate - Change default type of UUID from binary to text in SQLite databaseHibernate - 在 SQLite 数据库中将 UUID 的默认类型从二进制更改为文本
【发布时间】:2019-06-04 20:59:57
【问题描述】:

我正在使用 Hibernate v5.4.0.Final 和带有this dialect 的 SQLite,但是当我创建一个带有 UUID 列的表时,它被存储为 BLOB 而不是数据库中的文本。

例如:

我想将数据存储为文本,以便我可以在数据库中查看它,我发现 this solution 在列字段上使用 @Type(type = "uuid-char") 效果很好。

但是,在我的应用程序中,我无权访问表类,因此无法轻松将此注释添加到字段中。

我链接的问题中的一些 cmets/answers 声称您可以子类化您正在使用的方言并在构造函数中使用 registerColumnType() 但这似乎不起作用,答案是 9 岁所以我不要觉得这令人惊讶。

如何覆盖默认的 UUID 类型?

【问题讨论】:

  • 您需要指定一个确切版本的Hibernate。
  • Using UUIDs in SQLite的可能重复
  • 5.4.0.Final @chrylis
  • @TimBiegeleisen 我不知道如何将 blob 转换回文本,我的问题是关于如何覆盖 Hibernate 库中类型的默认序列化,以便它不使用 BLOB第一名。
  • 我是说不要将 UUID 存储为文本,如果唯一的原因是在数据库中查看它们。

标签: java hibernate sqlite


【解决方案1】:

我实际上建议将您的 UUID 作为 16 字节二进制 BLOB 存储在 SQLite 表中。这是在 SQL 数据库中存储 UUID 的最紧凑和最有效的方式。如果您想以文本形式查看二进制 UUID,this SO question 提供了几个选项:

SELECT hex(uuid) FROM yourTable
SELECT quote(uuid) FROM yourTable

如果您真的想将 UUID 存储为字符串,那么您应该在 Java/Hibernate 层中将它们转换为字符串,例如

String uuid = UUID.randomUUID().toString();

然后,只需将相应的 SQLite 列注释为文本,并将其视为任何其他文本列。

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 2014-03-09
    • 2016-03-19
    • 2016-11-03
    • 1970-01-01
    • 2014-02-27
    • 2017-04-27
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多