6

以下の私のクラスを検討してください

製品(抽象ルート クラス)

@Entity
@Table(name="PRODUCT")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="PRODUCT_TYPE")
public abstract class Product {

    @Id
    @GeneratedValue
    @Column(name = "product_ent_id", insertable = false)
    private int productEntId;
}

Car (Product を拡張する別の親クラス)

@Entity
@Table(name="CAR")
@DiscriminatorValue(value="Car") 
@PrimaryKeyJoinColumn(name="car_ent_id") 
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="CAR_TYPE") 
public abstract class Car extends Product {

    @Column(name = "car_ent_id", insertable = false, updatable = false)
    private int carEntId;
}

Speeder (Car を拡張する階層の最後の子)

@Entity
@Table(name="SPEEDER")
@DiscriminatorValue(value="Speeder") 
@PrimaryKeyJoinColumn(name="speeder_ent_id")
public class Speeder extends Car {

    @Column(name = "speeder_ent_id", insertable = false, updatable = false)
    private int speederEntId;
}

JPAがディスクリミネーターを使用してオブジェクトモデルをデータモデルにマップするとき、単一の親から子への階層でディスクリミネーターを使用しても問題ありませんでした。ディスクリミネーターの値は適切に設定されていますが、Speeder-extends- Car-extends-Product、ディスクリミネーターの値または適切に機能していない、

商品表 車表 スピーダーテーブル

単一の継承(子から親など)で識別子を使用して結合継承のみを使用している場合、識別子の値は尊重された列に適切にマップされていますが、別の階層を追加したため、スピーダーの識別子の値Product テーブルの discriminator 列に配置され、Car テーブルのdiscriminator 列はnull 値として残されています。ここで達成しようとしていることを理解していただければ幸いです。これは可能ですか? 回避策はありますか?非常に多くの例がありますが、この結合された継承テーブルのような例である、より深い階層を示すものを正確に見つけることはできませんしかし、より深い階層では、周りの例は単純な階層しかなく、この種の戦略を使用する他の例とほとんど同じです. どんな助けや啓発も大歓迎です。

4

0 に答える 0