我有一个抽象@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"; }
}
但是,这些实现不在我的控制之下,所以我不能更改Vehicleor 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所有者可以以不同的方式绘制不同的实例,因此存在Car一对多PaintedCar的可能性。
从理论上讲,我应该能够将表示 a 所需的所有信息存储PaintedCar在带有字段的表中:
int paintedCarId;
int carId; /* FK to Car */
varchar color;
请注意,它PaintedCar必须是 的实例Car,而不仅仅是Vehicle. 但是,我不太清楚如何让 Hibernate 保持这种关系。有什么诀窍?