2009-04-17 81 views
9

我想使用PostgreSQL的原生UUID类型和Java UUID。我使用Hibernate作为我的JPA提供者和ORM。如果我试图直接保存它,它只会在Postgres中保存为bytea。Postgres + Hibernate + Java UUID

我该怎么做?

回答

8

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

release notes提到这种变化:

地图数据库UUID类型java.util.UUID中。这只适用于相对较新的服务器(8.3)和JDK(1.5)版本。

+2

这似乎是与驱动程序版本9.2-1002,目前没有冬眠核心3.3.1.GZ. https://community.jboss.org/thread/229747?_sscc=t上有一个悬而未决的问题。我也遇到了使用GORM的问题。 – 2014-04-03 22:19:15

0

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

0

,你可以尝试使用:

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

其中columnDefinition是本地的SQL

0

也许片段就可以得到UUID类型为自动转换为字符串(根据UUID.toString()应该给规范的36个字符表示)?数据库通常在字符串和本机类型之间可靠地进行转换。

3

这里是我对Postgresql UUID supported by Hibernate?的回答的转发......我知道这个问题很旧,但如果有人绊倒了它,这将帮助他们。

这可以通过添加以下标注的UUID解决:

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

至于为什么Hibernate不只是使这种默认设置,我不能告诉你......

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

0

试试这个

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()") 
private String uuid;