0

我想将一个类映射到一个原始类型

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

在此示例中,我想将电子邮件保存为字符串

我希望是这样的:

interface someInterface{

   String getValue();
   void setValue(String p);

}

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

我不想序列化课程

我以电子邮件为例,但我想到了许多其他类,几乎没有成为一个完整的实体。

任何的想法?

4

4 回答 4

0

JPA2.1 提供了 AttributeConverter,这意味着可以使用转换器将字段标记为将其持久化为例如字符串。目前所有的 JPA 实现都有自己的变体,但DataNucleus JPA已经提供了 JPA2.1 功能,请参阅本页的底部。

于 2012-05-05T06:22:47.490 回答
0

制作两个变量。电子邮件是对象并且您标记为 @Transient 和 emailStr 存储在数据库中。emailStr getter 和 setter 应该是私有的,getEmail 基于 emailStr 创建 email 对象(惰性)。

如果您在许多实体中有电子邮件,另一种解决方案是创建自定义用户类型。

只是谷歌休眠用户类型..

于 2012-05-05T07:53:16.693 回答
0

为此,您可以在 EclipseLink 中使用转换器,

见, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Basic_Mappings/Default_Conversions_and_Converters

于 2012-05-07T14:05:59.860 回答
-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;
   }
}
于 2012-05-05T02:16:22.090 回答