我有一个没有鉴别器列的现有表,我需要将它映射到单表层次结构,如何映射? 这是我的桌子
vehicle
========
vehicle_id
manufacturer
load_capacity
passenger_capacity
我有3个班级
Vehicle.java
vehicleId;
manufacturer;
TransportationVehicle.java
loadCapacity;
PassengerVehicle.java
passengerCapacity;
答案 0 :(得分:0)
一种方法是在@MappedSuperclass
课程上使用Vehicle
,然后将TransportationVehicle
和PassengerVehicle
映射到同一张桌子。
这样您就可以从Vehicle
继承映射字段,而不必将其映射为实体。
答案 1 :(得分:0)
如果您没有歧视者,那么您需要另一个条件来区分TransportationVehicle
和PassengerVehicle
。我想你可以使用:
TransportationVehicle
:loadCapacity IS NOT NULL
PassengerVehicle
:passengerCapacity IS NOT NULL
由于JPA继承总是需要一个鉴别器,您必须使用@MappedSuperclass
和两个@Entity
类以及相应的@Where
注释:
@MappedSuperclass
public abstract class Vehicle {
@Id
private Long vehicleId;
private String manufacturer;
}
@Entity @Where(clause = "loadCapacity IS NOT NULL")
public class TransportationVehicle extends Vehicle {
private int loadCapacity;
}
@Entity @Where(clause = "passengerCapacity IS NOT NULL")
public class PassengerVehicle extends Vehicle {
private int passengerCapacity;
}
与真实 JPA继承相比,此方法的主要缺点是:您无法在JPA中引用映射的超类 - 既不在查询中(SELECT v FROM Vehicle v
)也不在另一个实体中引用({{1 }})。