私は抽象的、、@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
。Vehicles
Bike
Skateboard
私はペイント ショップを経営しているので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 でこの関係を維持する方法がよくわかりません。トリックは何ですか?Car
Vehicle