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

2 つの変数を作成します。オブジェクトであり、データベースに保存する @Transient および emailStr としてマークする電子メール。emailStr のゲッターとセッターは非公開にする必要があり、getEmail は emailStr に基づいてメール オブジェクトを (遅延して) 作成します。

多くのエンティティに電子メールがある場合の別の解決策は、カスタム UserType を作成することです。

休止状態のUserTypeをGoogleで検索するだけです..

于 2012-05-05T07:53:16.693 に答える
-1

JPAに関する限り、クラスで文字列を使用することを妨げるものは何もありません。または、その他のプリミティブ型...

編集:うまくいけば、このようなことを意味します

@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 に答える