2016-06-21 87 views
0

我陷入了1個問題。在我的項目中,getter和setter是STRING類型的,而對應列的SQL定義是UniqueIdentifier,它工作正常。例如:將字符串保存爲PostgreSQL中的UUID

@Column(name="name") 
private String name; 

public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 

但是,當我們開始對PostgreSQL數據庫的支持,我們遷移所有表與定義UUID作爲列類型,其中它會引發錯誤

我想保存字符改變爲UUID要麼投它或更改列類型。

錯誤:

造成的:org.postgresql.util.PSQLException:ERROR:列「UID」的類型UUID的,但表達的類型字符改變 提示的:你需要重寫或投表達方式。

我知道我必須將getter/setter更改爲java.util.UUID類型的解決方案,但我們無法採用此解決方案,因爲它需要在整個工作區中更改所有getter和setter更改。

我嘗試瞭解決方案: HERE 它說,我可以UUID保存爲字符串(DB列型),但沒有解釋如何字符串保存爲UUID(DB列型)

我在實體嘗試這個類:

@Entity 
@Table(name="emptest4") 
public class Employee { 

@Id 
@Column(name="uid", columnDefinition = "UUID") 
@GeneratedValue(generator = "uuid") 
@GenericGenerator(name = "uuid", strategy = "uuid2") 
private String uid; 

和在hibernate.cfg.xml:

<property name="hbm2ddl.auto">create</property> 

SO它創建表自動盟友。我觀察到的表創建是這樣的:

CREATE TABLE public.emptest4 
(
uid uuid NOT NULL, 
name character varying(255), 
CONSTRAINT emptest4_pkey PRIMARY KEY (uid) 
) 

但錯誤是相同:(

任何幫助會感激

+0

您可以指定的Hibernate的版本? – sibnick

+0

它的休眠5.2.0 – JavaDeveloper

回答

0

休眠5是JPA 2.1兼容,您可以使用@。 AttributeConvertor爲你的第一個樣本。關於它的好文章:How to implement a Converter?

但是不適用於@Id列(你的第二個樣本)在這種情況下,最合理的方法是添加額外的getter/setter方法,字符串< - > UUID,並使用UUID作爲ID數據類型

PS

我的想法:

@Entity 
@Table(name="emptest4") 
public class Employee { 

    @Id 
    @Column(name="uid", columnDefinition = "UUID") 
    @GeneratedValue(generator = "uuid") 
    @GenericGenerator(name = "uuid", strategy = "uuid2") 
    private UUID originalUid; 

    public String getUid(){ 
     return ..// convert originalUid to string 
    } 

    public void setUid(String id){ 
     originalUid = ..// convert id to originalUid 
    } 

    //Getter and Setter for originalUid value 
+0

感謝您的回覆。我沒有很好地理解解決方案,但是嘗試了其他方法,但是又出現了錯誤。試過 私人UUID uid; \t \t/* @標識 \t @Column(name = 「UID」) \t私人UUID的UID; */ \t公共字符串的getuid(){ \t \t回uid.toString(); \t} \t public void setUid(String uid){ \t \t this.uid = UUID.fromString(uid); \t} 但在我添加UUID作爲HBM.xml中的類型時出現錯誤 – JavaDeveloper

+0

我修改了我的答案 – sibnick

+0

感謝您的回答。實際上,這是我在上面評論中寫的。 SETTER 'public void setUid(String uid){this.uid = UUID.fromString(uid); }' GETTER 'public String getUid(){return uid.toString(); }' 但這是XML中的問題,顯示getId返回NULL。 – JavaDeveloper

相關問題