JPA(EclipseLink),没有重复@Converter注释的类型处理?

时间:2011-02-10 19:27:08

标签: jpa eclipselink converter

是否可以通过EclipseLink以特定方式设置一个类,而不是每次使用时都标记它?例如,假设我有一个班级:

class MyObj {
    private int a;
    private int b;

    public MyObj(int a, int b) {
        this.a = a;
        this.b = b;
    }

    ...
}

我希望将其作为字符串“a = 1,b = 2”存储在数据库的列中。我不希望它被序列化为blob,但真正最终成为VARCHAR列中的字符串。我可以使用转换器来完成此操作,但是我需要在使用该类的任何地方都有一个注释:

@Entity
class User {
    @Column(name="first")
    private MyObj one;

    @Column(name="second")
    private MyObj two;

    ...

}

以上操作无效,因为它不知道如何在没有注释的情况下转换类型 - 我希望能够有效地为该类型注册默认转换器。 (我尝试使用Serializable / Externalizable但没有成功,因为我最终试图在数据库中插入一个字节数组。)

这可能是标准的JPA还是EclipseLink? Hibernate似乎有类似@TypeDef的东西,听起来它可能会起作用,但我正在使用EclipseLink。

3 个答案:

答案 0 :(得分:1)

使用转换器是最好的方法。您可以定义一个SessionCustomizer来扫描您的项目并设置转换,或创建您自己的自定义ConversionManager,但在映射上明确设置转换器是最好的方法。

答案 1 :(得分:0)

似乎没有办法做到这一点,这似乎是一种耻辱。最后,我使用显式使用的转换注释了类成员。

答案 2 :(得分:0)

您可以使用标准类型获取setter方法并自行转换。例如:

  

@Entity class User {       @Column(名称= “第一”)       私人MyObj一个;

public void setOne(String myObj){
     one = convert(myObj);
}

public String getOne(){
    return convertBack(one);
}
     

}