我有一个抽象的@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
的不同实例进行不同的绘制,因此可能会有Car
个PaintedCar
PaintedCar
}第
理论上,我应该能够在表格中存储表示int paintedCarId;
int carId; /* FK to Car */
varchar color;
所需的所有信息:
PaintedCar
请注意,Car
必须是Vehicle
的实例,而不仅仅是{{1}}的实现。但是,我无法弄清楚如何让Hibernate坚持这种关系。有什么诀窍?