每个类层次结构的单个表没有鉴别器列

时间:2015-09-21 10:13:56

标签: java hibernate nhibernate

我有一个没有鉴别器列的现有表,我需要将它映射到单表层次结构,如何映射? 这是我的桌子

vehicle
========
vehicle_id
manufacturer
load_capacity
passenger_capacity

我有3个班级

Vehicle.java
vehicleId;
manufacturer;

TransportationVehicle.java
loadCapacity;

PassengerVehicle.java
passengerCapacity;

2 个答案:

答案 0 :(得分:0)

一种方法是在@MappedSuperclass课程上使用Vehicle,然后将TransportationVehiclePassengerVehicle映射到同一张桌子。

这样您就可以从Vehicle继承映射字段,而不必将其映射为实体。

答案 1 :(得分:0)

如果您没有歧视者,那么您需要另一个条件来区分TransportationVehiclePassengerVehicle。我想你可以使用:

  • TransportationVehicleloadCapacity IS NOT NULL
  • PassengerVehiclepassengerCapacity 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 }})。