我想将类映射到基本类型
@Entity
@Table(name="PERSON")
public class Person implements Serializable {
...
private Email email = null;
...
@Column(name="email")
public Email getEmail() {
return email;
}
public void setEmail(Email email) {
this.email=email;
}
}
在这个例子中,我想像String一样保存电子邮件
我希望这样:
interface someInterface{
String getValue();
void setValue(String p);
}
然后,如果我在电子邮件中实现这个界面,它可以透明地保存和加载(我没有找到这样的东西)。
我不想序列化类
我使用电子邮件作为例子,但我想到了许多其他类,很少成为一个整体。
有什么想法吗?
答案 0 :(得分:0)
JPA2.1提供了AttributeConverter,这意味着可以使用将其持久化的转换器标记字段,例如String。目前所有JPA实现都有自己的变体,但DataNucleus JPA已经提供了JPA2.1功能,请参见this page的脚。
答案 1 :(得分:0)
制作两个变量。电子邮件是对象,您标记为存储在数据库中的@Transient和emailStr。 emailStr getter和setter应该是私有的,getEmail会根据emailStr创建电子邮件对象(懒惰)。
另一种解决方案是,如果您在许多实体中收到电子邮件,则需要创建自定义UserType。
只是google hibernate UserType ..
答案 2 :(得分:0)
您可以在EclipseLink中使用转换器,
答案 3 :(得分:-1)
就JPA而言,没有什么可以阻止你在类中使用String。或者任何其他原始类型......
编辑:你的意思是这样的希望
@Entity
@Table(name="PERSON")
public class Person implements Serializable {
...
private String email = null;
...
@Column(name="email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email=email;
}
}