Java EE - [class <ClassName] uses a non-entity [class <ClassName>] 作为关系属性中的目标实体

Java EE - [class <ClassName] uses a non-entity [class <ClassName>] as target entity in the relationship attribute

我正在开发具有持久性的 Java EE 应用程序。

我的汽车class有几个预订预订class 扩展了 Quote class.

出于某种原因,预订 不是实体class。我的猜测是继承有问题,但我似乎无法弄清楚。

汽车看起来像这样:

@Entity
public class Car {

    @Id
    private int id;

    @OneToOne(cascade=PERSIST, mappedBy="CarType")
    private CarType type;

    @OneToMany(cascade=REMOVE, mappedBy="Quote")
    private Set<Reservation> reservations;

    public Car() {}

    . 
    .
    .

    public boolean equals(Object otherObject) {
        ...
    }

    public int hashCode() {
        ...
}

预订看起来像这样

@Entity
@Table(name = "Reservation")
public class Reservation extends Quote {

    @Id
    @GeneratedValue(strategy=AUTO)
    @Column(name="reservationId")
    private int reservationId;

    private int carId;

    public Reservation() {}

    public Reservation(Quote quote, int carId) {
        super(quote.getCarRenter(), quote.getStartDate(), quote.getEndDate(), 
            quote.getRentalCompany(), quote.getCarType(), quote.getRentalPrice());
        this.carId = carId;
    }

    .
    .
    .

    public boolean equals(Object otherObject) {
        ...

    }

    public int hashCode() {
        ...
    }
}

引用 看起来像这样:

@MappedSuperclass
public class Quote implements Serializable {

    @Id
    @GeneratedValue(strategy=AUTO)
    @Column(name="quoteId")
    private int quoteId;

    @Temporal(DATE)
    private Date startDate;
    @Temporal(DATE)
    private Date endDate;
    private String carRenter;
    private String rentalCompany;
    private String carType;
    private double rentalPrice;

    public Quote() {}

    public Quote(String carRenter, Date start, Date end, String rentalCompany, String carType, double rentalPrice) {
        ...
    }

    .
    .
    .

    @Override
    public int hashCode() {
        ...
    }

    @Override
    public boolean equals(Object obj) {
        ...    
    }
}

为什么 Reservation 不是正确的实体 class?

实体 Reservation 必须删除 @id,因为 daughter 从 super 继承了它 class

指定一个class,其映射信息应用于从它继承的实体。映射的 superclass 没有为其定义单独的 table。

我通过执行以下操作解决了问题:

  • 我从 Reservation 中删除了 id,因为它继承自 Quote
  • 我手动将 Reservation 作为实体添加到 persistence.xml