2

私は抽象的、、@MappedSuperclassおよびVehicle具体的な実装を持っていますCar

@MappedSuperclass
public abstract class Vehicle { ... }

@Entity
@Table(schema = "Dealer", name = "Cars")
public class Car {
    ...
    // you can have any color you like, as long as it's black...
    private final String color = "Black";  

    public String getColor() { return "Black"; }
}

ただし、これらの実装は私の管理下にないため、VehicleまたはCarを変更することはできず、データベースも変更できません。Car私がアクセスできるディーラーのスキーマに読み取り専用のリストがあるとします。もちろん、その他の 、 、 などと同様に、他にも多くのメソッドがありますCarVehiclesBikeSkateboard

私はペイント ショップを経営しているのでPaintedCar、 をオーバーライドしますgetColor()。他のすべての点で、このクラスは と同じですCar:

public class PaintedCar extends Car {
    ...
    private String customColor;

    @Override
    public String getColor() { return customColor; }

}

同じCarものを複数回ペイントすることも、 の異なるインスタンスをCar異なる所有者が異なる方法でペイントすることもできるため、1 つCarから複数の の可能性がありPaintedCarます。

PaintedCar理論的には、表現するために必要なすべての情報をフィールドを持つテーブルに格納できるはずです。

int paintedCarId;
int carId;  /* FK to Car */
varchar color; 

の実装だけでなくPaintedCar、 のインスタンスでなければならないことに注意してください。ただし、Hibernate でこの関係を維持する方法がよくわかりません。トリックは何ですか?CarVehicle

4

0 に答える 0