さて、私が知る限り、JPAで最もよく使用される継承マッピング戦略は2つあります。
- 単一のテーブル-すべてのクラス(サブクラスとスーパークラスの両方)が、すべてのクラスのすべてのフィールドを列として持つ単一のテーブルにマップされます。また、一部のサブクラスにのみ固有のフィールドは、他の対応するエントリではNULLです。
。
@Entity
@Table(name="types")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="types", discriminatorType=DiscriminatorType.STRING, length=1)
public abstract class Base { //... }
@Entity
@DiscriminatorValue(value="A")
public class TypeA extends Base { //... }
@Entity
@DiscriminatorValue(value="B")
public class TypeB extends Base { //... }
- 結合テーブル戦略-基本クラス用に1つのテーブルがあり、列としてすべての基本クラスのフィールドと、タイプ用にもう1つの列があります。また、サブクラスごとに特定のテーブルがあり、それぞれに対応するサブクラスのフィールドのみがあり、ベーステーブルと1対1で(PKによって)マップされます。
。
@Entity
@Table(name="USERS")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="types",discriminatorType=STRING, length=1)
public abstract class Base { //... }
@Entity
@Table(name="SELLERS")
@DiscriminatorValue(value="A")
@PrimaryKeyJoinColumn(name="base_id")
public class TypeA extends User { //... }
@Entity
@Table(name="BIDDERS")
@DiscriminatorValue(value="B")
@PrimaryKeyJoinColumn(name="base_id")
public class TypeB extends User { //... }
私のドメインには、次のクラスがあります。
public abstract class Base {
//data
}
public class TypeA extends Base {
//only one field
}
public class TypeB extends Base {
// many more fields
}
そして、1。TypeAとBaseの間の継承マッピング戦略と2. TypeBとBaseの間の継承マッピング戦略(これは過度に単純化されています。実際には多くのエンティティがあります)。もう1つのフィールドに別のテーブルが必要ないためです。これはJPAで可能ですか?それは意味がありますか?
編集:コードのフォーマットの何が問題なのかわかりません...