我有一个抽象@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
or 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 保持这种关系。有什么诀窍?