0

タイトルが少し変なので、はっきりさせておきます。

1対多の関係にあるガレージとビークルの2つのオブジェクトがあります。車やトラックなど、複数の種類の車両があります。タイプはVehicleテーブルに文字列として保持されます。

2つのクラスは次のとおりです。

@Entity
@Table(...)
public class Garage {
    ....

    @Column(name = "garageId")
    private Integer garageId;

    @OneToMany
    @JoinColumn(name = "garageId")
    private Set<Vehicle> vehicles;

    ....
}

@Entity
@Table(...)
public class Vehicle {
    ....

    @Column(name = "garageId")
    private Integer garageId;

    //could be "Truck" or "Car"
    @Column(name = "type")
    private String type;

    ....
}

車両のタイプを区別するために、現在、タイプ列を確認して列挙型を使用する必要があります。私がやりたいのは、Typeフィールドに依存するのではなく、さまざまなタイプを表すために、CarやTruckなどのVehicleのサブクラスを用意することです。そうすれば、私のコードはinstanceofそのフィールドを使用する代わりにタイプを判別できます。

ただし、Type列の値に基づいてサブクラスをインスタンス化する方法をHibernateに指示する方法、または可能かどうかはわかりません。

私はあなたたちが与えることができるどんな助けにも感謝します。前もって感謝します!

4

1 に答える 1

1

現在のデータベーススキーマを保存する場合は、列を識別子として使用するSINGLE_TABLE継承戦略を使用する必要があります。type

@Entity 
@Table(...) 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Vehicle { ... }

@Entity
@DiscriminatorValue("...")
public class Car extends Vehicle { ... }

@Entity
@DiscriminatorValue("...")
public class Truck extends Vehicle { ... }
于 2010-11-10T21:46:18.947 に答える