12

我想将 PostgreSQL 的本机 UUID 类型与 Java UUID 一起使用。我使用 Hibernate 作为我的 JPA 提供程序和 ORM。如果我尝试直接保存它,它只是在 Postgres 中保存为字节。

我怎样才能做到这一点?

4

6 回答 6

13

尝试使用最新开发版本的 JDBC 驱动(目前为 8.4dev-700),或者等待下一个发布版本。(编辑添加:8.4-701 已发布)

发行说明提到了这一变化:

将数据库 uuid 类型映射到 java.util.UUID。这仅适用于相对较新的服务器 (8.3) 和 JDK (1.5) 版本。

于 2009-04-23T09:19:13.407 回答
5

这是我对Hibernate 支持的 Postgresql UUID的回答的转贴?...我知道这个问题很老,但如果有人偶然发现它,这将帮助他们。

这可以通过向 UUID 添加以下注释来解决:

import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;

至于为什么 Hibernate 不只是将其设为默认设置,我无法告诉你......

更新createNativeQuery:使用该方法打开具有 UUID 字段的对象似乎仍然存在问题。幸运的是,createQuery到目前为止,该方法对我来说效果很好。

于 2011-11-23T03:36:39.010 回答
1

你可以尝试:

 @Column(name="foo", columnDefinition="uuid") 

其中 columnDefinition 是原生 SQL 的一个片段

于 2009-04-21T14:31:03.673 回答
1

试试这个

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;
于 2018-02-27T22:58:30.550 回答
0

在非 JPA 使用中,我将创建一个 UserType 以将 UUID 格式化为 PostgreSQL 接受的字符串,然后只需将 UserType 实现的名称作为列类型。

于 2009-04-17T17:39:51.350 回答
0

也许您可以让 UUID 类型自动转换为字符串(uuid.toString() 应该给出规范的 36 字符表示)?DB 通常在字符串和本机类型之间进行可靠的转换。

于 2009-04-22T21:50:18.913 回答