1

私は JPA の初心者であり、これに対する適切な Google ソリューションを見つけることができませんでした。文字列の LinkedHashMap に JPA アノテーションを設定したいと考えています。これがひねりです。マップされたSuperClassとしてマッピングしている抽象クラスがあります。このスーパークラスのすべての実装が文字列の LinkedHashMap を持つようにします。これが私の例です:

@MappedSuperclass
public abstract class AbstractCustomerType implements Serializable
{

@ElementCollection  //is this right?
protected LinkedHashMap<String, String> customerData;
}

では、データベースには何が期待できるのでしょうか? 顧客データの独自の結合テーブルを持つ AbstractCustomerType の各実装? その場合、10 個の CustomerTypes がある場合、10 個の customerData テーブルがあるでしょうか? すべての customerTypes 間で共有される customerData テーブルを 1 つだけ取得するように、これにどのように注釈を付けますか?

4

2 に答える 2

2

それはまったくうまくいきません。永続的なコレクションは、具象型 (Map、Set、または List) ではなく、インターフェース型で型指定する必要がありますが、HashMap、LinkedHashMap、HashSet、または ArrayList は型指定しないでください。

仕様の 23 ページを参照してください。

コレクション値の永続フィールドとプロパティは、エンティティ クラスが上記の JavaBeans メソッド規則に準拠しているかどうか、およびフィールドまたはプロパティ アクセスが使用されているかどうかに関係なく、次のコレクション値インターフェイスのいずれかに関して定義する必要があります。 java.util.Collection 、java.util.Set、java.util.List、java.util.Map。

于 2013-08-07T20:10:30.947 に答える
0

@CollectionTable アノテーションを使用して、単一のテーブルを定義してみてください。また、ID がサブクラス全体で一意であることを確認してください (同じシーケンスを使用してください)。

JOINED 継承の使用も検討してください。

JPA は技術的にはインターフェースのみを許可しますが、EclipseLink は実装を許可します (開発ビルド (2.6) で EAGER または LAZY の場合)。

于 2013-08-08T13:23:02.800 に答える