是否可以通过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。
答案 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); }
}