将字符串保存为PostgreSQL中的UUID

问题描述:

我陷入了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

休眠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