2011-02-10 8 views
1

クラスを使用するたびにタグ付けすることなく、クラスをEclipseLinkによって特定の方法で直列化するように設定できますか?私は、これは文字列「= 1、B = 2」としてデータベースの列に格納したいJPA(EclipseLink)、繰り返される@Converter注釈のない型の処理?

class MyObj { 
    private int a; 
    private int b; 

    public MyObj(int a, int b) { 
     this.a = a; 
     this.b = b; 
    } 

    ... 
} 

:たとえば、私はクラスを持っていたと言います。私は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

これを行う方法はありませんが、これは残念です。最後に、クラスメンバーに、明示的に使用する変換を注釈しました。

0

setterメソッドを標準型で取得して、自分で変換することができます。例えば:

@Entityクラスユーザー{ @Column(名= "第一") このmyobj 1プライベート。コンバータを使用して

public void setOne(String myObj){ 
    one = convert(myObj); 
} 

public String getOne(){ 
    return convertBack(one); 
} 

}

1

最良の方法です。プロジェクトをスキャンして変換を設定するSessionCustomizerを定義することも、独自のカスタムConversionManagerを作成することもできますが、マッピングに変換器を明示的に設定することが最善の方法です。

関連する問題