2009-04-17 41 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;