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
我正在开发具有持久性的 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