我想使用PostgreSQL的原生UUID類型和Java UUID。我使用Hibernate作爲我的JPA提供者和ORM。如果我試圖直接保存它,它只會在Postgres中保存爲bytea。Postgres + Hibernate + Java UUID
我該怎麼做?
我想使用PostgreSQL的原生UUID類型和Java UUID。我使用Hibernate作爲我的JPA提供者和ORM。如果我試圖直接保存它,它只會在Postgres中保存爲bytea。Postgres + Hibernate + Java UUID
我該怎麼做?
嘗試使用JDBC驅動程序的最新開發版本(目前8.4dev-700),或者等待下一個發行版本。 (編輯補充:8.4-701已發佈)
的release notes提到這種變化:
地圖數據庫UUID類型java.util.UUID中。這隻適用於相對較新的服務器(8.3)和JDK(1.5)版本。
在非JPA用法中,我會創建一個UserType來將UUID格式化爲PostgreSQL接受的字符串,然後僅將UserType實現的名稱作爲列類型。
,你可以嘗試使用:
@Column(name="foo", columnDefinition="uuid")
其中columnDefinition是本地的SQL
也許片段就可以得到UUID類型爲自動轉換爲字符串(根據UUID.toString()應該給規範的36個字符表示)?數據庫通常在字符串和本機類型之間可靠地進行轉換。
這裏是我對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
方法對我來說工作得很好。
試試這個
@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;
這似乎是與驅動程序版本9.2-1002,目前沒有冬眠核心3.3.1.GZ. https://community.jboss.org/thread/229747?_sscc=t上有一個懸而未決的問題。我也遇到了使用GORM的問題。 – 2014-04-03 22:19:15