【发布时间】:2014-08-05 18:17:40
【问题描述】:
我开始使用 Hibernate 有一个关于 InheritanceType.JOINED 和 @PrimaryKeyJoinColumn 的问题。
鉴于以下数据库表,其中员工引用人员和经理引用员工:
create table person (person_id int(10) auto_increment,
name varchar(100),
primary key (person_id));
create table employee (employee_id int(10) auto_increment,
person_id int(10),
salary int(10),
primary key (employee_id));
create table manager (manager_id int(10) auto_increment,
employee_id int(10),
shares int(10),
primary key (manager_id));
我可以为 Person 和 Employee 创建前两个类,如下所示:
@Entity
@Table(name="person")
@Inheritance(strategy=InheritanceType.JOINED)
public class Person {
@Id
@GeneratedValue
@Column(name="person_id")
private int personId;
@Column(name="name")
private String name;
}
@Entity
@Table(name="employee")
@PrimaryKeyJoinColumn(name="person_id")
public class Employee extends Person {
@GeneratedValue
@Column(name="employee_id")
private int employeeId;
@Column(name="salary")
private int salary;
}
当涉及到 Manager 类时,我不确定要为 @PrimaryKeyJoinColumn 使用哪个值。通过阅读 JPA 规范,我应该在整个超类/子类/子类层次结构中只使用一个 id,我怀疑应该是 person_id。
我应该从 manager 表中删除 employee_id 列并用 person_id 替换它吗?我问的原因是在数据库中有“级联”主键似乎很自然(即经理不直接指代人),但我相信 Hibernate 要求所有子子类(无论多么“深”)都包含一个外键返回到超类。对我的断言进行一些确认会非常有用。
【问题讨论】: