2016-09-05 5 views
1

私のデータベースの列の1つは、"3,7,8"のような非正規化IDを持つ文字列です。私はdbのレガシーロジックを変更することはできません。JPAで連結されたIDを外部キーとして使用する文字列の値を使用

私は現在List<Integer>にフィールドを変換するには@Converterを使用していますが、実体が直接定義するので、私は2番目のパスをしたいと思います:

@Column 
@OneToMany 
List<ForeignEntity> 

にJPAを伝えるために任意のネイティブな方法がありますそれを変換するために2番目のパスを作る?

私はコンバーターで解決できるとは知っていますが、私はデータコンバーター内でクエリを使用することから救い、標準のJPAアノテーションとメカニズムを活用しています。

私はさらに複雑にそれを行うと

@Column 
@OneToMany 
List<Map<String,String>> resolvedValues; // Contains {Map[A,B,C]{... , ..., ...}, Map[A,B,C]{... , ..., ...}, ... } 
に直接

id | key | value 
---------------- 
3 | A | ... 
3 | B | ... 
3 | C | ... 
7 | A | ... 
7 | B | ... 
7 | C | ... 
... 

解決することができるように、誰かがよりよい解決策に私を指すことができれば確かに、私の外国法人が、マップよりも何もありません

私は本当にgreatefulだろう!

答えて

0

JPAの - javax.persistence.AttributeConverterインターフェイスを使用できます。そのメソッドをオーバーライドすることで

: -

https://docs.oracle.com/javaee/7/api/javax/persistence/AttributeConverter.html

+0

おかげでここ

@Override public String convertToDatabaseColumn(ForeignEntity fe) { . . . } 

はスペックです!私はすでにそれを使用しています。私が言ったように、私は現在、文字列をリストに変換しています。これは、通常のJPAアノテーションを使用して参照先のエンティティとしてデコードする方法です。これは、コンバータコードのサブクエリから私を救うためです – Whimusical

関連する問題