私は抽象的、、@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私がアクセスできるディーラーのスキーマに読み取り専用のリストがあるとします。もちろん、その他の 、 、 などと同様に、他にも多くのメソッドがありますCar。VehiclesBikeSkateboard
私はペイント ショップを経営しているので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