Hibernate Springboot JPA类继承问题
我有两类:个人和员工。Hibernate Springboot JPA类继承问题,hibernate,spring-boot,spring-data-jpa,Hibernate,Spring Boot,Spring Data Jpa,我有两类:个人和员工。 员工源于人。Person不是抽象的,可能是连字实体。 人员表:id(主键)、名、姓 员工表:员工id(PK)、人员id(FK)、工作开始日期 这些类如下所示: 人员类别: @Inheritance(strategy = InheritanceType.JOINED) @Table(name = "persons") @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) public class Per
员工源于人。Person不是抽象的,可能是连字实体。
人员表:id(主键)、名、姓
员工表:员工id(PK)、人员id(FK)、工作开始日期
这些类如下所示:
人员类别:
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "persons")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
public Person() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
@Entity
@Table(name = "employees")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@PrimaryKeyJoinColumn(name = "person_id")
public class Employee extends Person {
@Id
@Column(name = "employee_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long employeeId;
@Column(name = "start_work_date")
private Date startDate;
public Employee() {
}
public Long getEmployeeId() {
return employeeId;
}
public void setEmployeeId(Long employeeId) {
this.employeeId = employeeId;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
}
员工类别:
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "persons")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
public Person() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
@Entity
@Table(name = "employees")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@PrimaryKeyJoinColumn(name = "person_id")
public class Employee extends Person {
@Id
@Column(name = "employee_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long employeeId;
@Column(name = "start_work_date")
private Date startDate;
public Employee() {
}
public Long getEmployeeId() {
return employeeId;
}
public void setEmployeeId(Long employeeId) {
this.employeeId = employeeId;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
}
还有我的寄托:
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
public接口EmployeeRepository扩展了JpaRepository{
}
当我调用get of employees时,employees成员本身已填充,但我的所有超类(Person)成员都为空。。。
我必须将FK成员添加到员工类别中吗?是否有理由选择继承而不是组合(与
员工
和人员
之间的关系)?正如我所读到的,使用InheritanceType.JOINED策略,员工不得拥有自己的id,因为带个人的comon id是加入标准,但在组织中,您有您的id和员工编号。。。组合是可能的,但在面向对象中,员工对个人的继承关系是有意义的。一对一毫无意义。继承是正确的,但是从子类中删除id。是否可以将员工id作为pk保留在db表中,或者也应该删除它?