在JPA中将类映射到原语

时间:2012-05-05 02:04:10

标签: java jpa

我想将类映射到基本类型

@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);

}

然后,如果我在电子邮件中实现这个界面,它可以透明地保存和加载(我没有找到这样的东西)。

我不想序列化类

我使用电子邮件作为例子,但我想到了许多其他类,很少成为一个整体。

有什么想法吗?

4 个答案:

答案 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)

答案 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;
   }
}