2016-12-12 81 views
0

如何使用Hibernate 5.0將java UUID作爲字節數組存儲在Postgres中?
型號: Postgres + Hibernate:將UUID映射到BYTEA升級到休眠5.0後失敗

@Entity 
@Table(name = "childs") 
public class Child { 
    ... 
    @Type(type = "pg-uuid") 
    private UUID parentId; 
    ... 
} 

表:用於工作只是罰款與Hibernate 4.3

CREATE TABLE childs (
    ... 
    parent_id BYTEA, 
    ... 
); 

一切。升級到5.0休眠後,我發現了以下錯誤:

PSQLException: ERROR: column "parent_id" is of type bytea but expression is of type uuid 

我檢查的PostgresUUIDType的源代碼,發現在Hibernate中的新版本添加以下內容:

@Override 
protected boolean registerUnderJavaType() { 
    // register this type under UUID when it is added to the basic type registry 
    return true; 
} 

我試圖將模型中的字段類型更改爲@Type(type = "uuid-binary"),但仍得到相同的錯誤。 (改變列的類型爲UUID不是一個選項。)
任何幫助,將不勝感激。謝謝。

回答

0

我找到解決這個問題的最簡單的方法是添加在domain包下至package-info.java(或其他地方必須):

@TypeDef(name = "pg-uuid-binary", defaultForType = UUID.class, typeClass = UUIDBinaryType.class) 

而且隨着ph-uuid-binary@Type(type = "pg-uuid-binary")註釋域的領域。

對我來說,看起來和uuid-binary的定義完全一樣,但不知何故它不起作用。