我想将 PostgreSQL 的本机 UUID 类型与 Java UUID 一起使用。我使用 Hibernate 作为我的 JPA 提供程序和 ORM。如果我尝试直接保存它,它只是在 Postgres 中保存为字节。
我怎样才能做到这一点?
我想将 PostgreSQL 的本机 UUID 类型与 Java UUID 一起使用。我使用 Hibernate 作为我的 JPA 提供程序和 ORM。如果我尝试直接保存它,它只是在 Postgres 中保存为字节。
我怎样才能做到这一点?
尝试使用最新开发版本的 JDBC 驱动(目前为 8.4dev-700),或者等待下一个发布版本。(编辑添加:8.4-701 已发布)
发行说明提到了这一变化:
将数据库 uuid 类型映射到 java.util.UUID。这仅适用于相对较新的服务器 (8.3) 和 JDK (1.5) 版本。
这是我对Hibernate 支持的 Postgresql UUID的回答的转贴?...我知道这个问题很老,但如果有人偶然发现它,这将帮助他们。
这可以通过向 UUID 添加以下注释来解决:
import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;
至于为什么 Hibernate 不只是将其设为默认设置,我无法告诉你......
更新createNativeQuery
:使用该方法打开具有 UUID 字段的对象似乎仍然存在问题。幸运的是,createQuery
到目前为止,该方法对我来说效果很好。
你可以尝试:
@Column(name="foo", columnDefinition="uuid")
其中 columnDefinition 是原生 SQL 的一个片段
试试这个
@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;
在非 JPA 使用中,我将创建一个 UserType 以将 UUID 格式化为 PostgreSQL 接受的字符串,然后只需将 UserType 实现的名称作为列类型。
也许您可以让 UUID 类型自动转换为字符串(uuid.toString() 应该给出规范的 36 字符表示)?DB 通常在字符串和本机类型之间进行可靠的转换。