我遵循了关于Hibernate中一对一映射的教程,但我总是以persistent class not known
异常结束。
基本情况是,我有一个参考客户和汽车的订单。我想将此订单与引用的实体一起保存到数据库中。
Order.java:
public class Order implements Serializable {
private static final long serialVersionUID = 234543634;
private String id;
private Car car;
private Customer customer;
private Date date;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
order.hbm.xml:
<hibernate-mapping>
<class name="wa2.entities.Order" table="ORDER">
<id column="ID" name="id" type="java.lang.String" />
<property column="DATE" name="date" type="java.util.Date" />
<one-to-one name="car" class="wa2.entities.Car"
cascade="save-update"></one-to-one>
<one-to-one name="customer" class="wa2.entities.Customer"
cascade="save-update"></one-to-one>
</class>
</hibernate-mapping>
有什么建议我在这里缺少什么?
编辑:car(它是抽象类,但还有两个继承它的类)
public abstract class Car implements Serializable {
private static final long serialVersionUID = 8513623981763963637L;
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
Customer.java:
public class Customer implements Serializable {
private static final long serialVersionUID = 864235654;
private String name;
private String surname;
private String adress;
private String id;
private Company company;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
答案 0 :(得分:0)
持久化类未知意味着hibernate映射不知道您尝试持久化的类。
您应该检查配置(在您的情况下为xml映射)并确保映射每个类。
在<one-to-one>
映射中引用该类是不够的。您还应将其映射为实体。
答案 1 :(得分:0)
请使用注释,这样会更容易。 如果不是,则需要列出xml中的所有类。 你需要为汽车确定继承策略。
注释要简单得多: 你需要@Entity在你的课程之上(除了Car,见下文)。 你需要id字段上的@Id。
对于继承,您有两个选择。
你可以将Car注释为@MappedSuperclass,这意味着它不是由JPA管理的,但它的字段将在继承的类中。
或者,更适合您的情况,让Car使用@Entity进行分配并定义继承策略: @遗产 @DiscriminatorColumn(...)