如何在不改变父类的情况下让hibernate持久化MappedSuperclass的一对多子类?

时间:2012-10-30 21:56:47

标签: hibernate jpa polymorphism

我有一个抽象的@MappedSuperclassVehicle和一个具体的实现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"; }
}

但是,这些实现不在我的控制之下,因此我无法更改VehicleCar,也无法更改数据库。假设我有权访问的经销商架构中有Car的只读列表。当然,Car中还有许多其他方法,以及其他VehiclesBikeSkateboard等。

我经营一家油漆店,所以我提供PaintedCar,它会覆盖getColor()。在所有其他方面,此类与Car

相同
public class PaintedCar extends Car {
    ...
    private String customColor;

    @Override
    public String getColor() { return customColor; }

}

可以多次绘制相同的Car,或者不同所有者可以对Car的不同实例进行不同的绘制,因此可能会有CarPaintedCar PaintedCar }第

理论上,我应该能够在表格中存储表示int paintedCarId; int carId; /* FK to Car */ varchar color; 所需的所有信息:

PaintedCar

请注意,Car必须是Vehicle的实例,而不仅仅是{{1}}的实现。但是,我无法弄清楚如何让Hibernate坚持这种关系。有什么诀窍?

0 个答案:

没有答案