0

私は次のものを持っています

@MappedSuperclass
public abstract class A {
    @Id @GeneratedValue
    public Long id;
}

@Entity
public class B extends A {
}

@Entity
public class C extends A {
}

@Entity
public class D {
    @ManyToOne
    public A a;
}

問題は、クラス D とフィールド a (型 B または C のいずれか) です。マッピングはどうあるべきですか?

4

3 に答える 3

1

A別のエンティティからを参照する場合はA、MappedSuperclass ではなく、エンティティにする必要があります。で注釈を付け、継承戦略@Entityを選択する必要があります。

それ以外は、マッピングはそのまま残ります。

于 2013-01-09T19:56:42.600 に答える
1

@MappedSuperclass に対して関係を定義できないため、これは JPA では有効ではありません。

A と @Entity をマップできます (TABLE_PER_CLASS 継承は同じデータ モデルを提供しますが、通常はより効率的なため、JOINED または SINGLE_TABLE も検討してください)。

EclipseLink では、このタイプの関係に @VariableOneToOne を使用することもできます。

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_variableonetoone.htm#CHDDFDGFを参照して ください。

于 2013-01-10T14:13:18.370 に答える
0

あなたがしていることは正しいです。マッピング A になります。A が B か C かを示す追加の列があります。Toplink では、列名は Type です。休止状態でも同様の概念があります。そして、この列は ORM によって自動的に入力されます。

于 2013-01-09T17:58:00.983 に答える