我有一个问题,我的Hibernate架构:@OneToOne或@ManyToOne引用了未知的实体:y.Person - 继承问题
我有一个MappedSuperClass人,在员工和客户。
--> Person.class
@MappedSuperclass
@Audited
public class Person extends PersistentObject {
@Column(name="TITLE")
@Enumerated(EnumType.STRING)
private Title title;
@Column(name="FIRST_NAME")
private String fname = null;
@Column(name="LAST_NAME")
private String lname = null;
--> Employee.class
@Entity
@Table(name="TBL_EMPLOYEE")
@Audited
public class Employee extends Person {
--> Customer.class
@Entity
@Table(name="TBL_CUSTOMER")
@Audited
public class Customer extends Person {
这个效果很好,但现在我的问题:我已经延长“人”与项目的列表,如地址/联系信息/等,并使用一个表的相同类型的所有项目(所有地址)。
当添加地址只有客户,这是没有问题:
--> Customer.java
@OneToMany(cascade = {CascadeType.ALL}, mappedBy="customer")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Address> addresses = null;
--> Address.java
@Entity
@Table(name="TBL_ADDRESSES")
@Audited
public class Address extends PersistentObject {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="CUSTOMER_ID")
private Customer customer;
现在我想将地址扩展到员工也。我想,我可以使用的超类型保存地址,但是这似乎并没有工作的权利:
--> Person.java
@OneToMany(cascade = {CascadeType.ALL}, mappedBy="person")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Address> addresses = null;
--> Address.java
@Entity
@Table(name="TBL_ADDRESSES")
@Audited
public class Address extends PersistentObject {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="PERSON_ID")
private Person person;
运行时,我得到以下错误:@OneToOne or @ManyToOne on at.test.Address.person references an unknown entity: at.test.Person
有没有可能性两个实体都使用同一张表作为他们的地址吗? ID不会冲突,因为员工和客户共享相同的顺序。或者我应该以另一种方式设计这个问题?
非常感谢您提前和最好的问候!
HAVA看看这个博客http://viralpatel.net/blogs/hibernate-inheritance-table-per-concrete-class-annotation-xml-mapping/。 – Flo
非常感谢这个链接,我意识到“每个子类一个表”范例就是我所期待的! – user2674457