实现以下要求的最佳 JPA 继承选项

Best JPA Inheritance option to implement the following requirement

有以下几种table table。保留这些 table 的好方法是什么?为此使用了继承策略,但没有按预期工作。

需求1:需要持久化学生table,它会持久化成员以及地址table

需求2:需要持久化老师table,它会持久化成员和地址table

需要对这些 table 执行获取、更新和删除选项。

Member {
  member_id - have one to one relation with student id and teacher id
  lastupdateddate
  latupdatedby
}

Student {
  student id - have one to one relation with member id
  student name
  lastupdateddate
  latupdatedby
}

teacher {
  teacher id - have one to one relation ship with member
  teacher name
  lastupdateddate
  latupdatedby
}

address {
  address id
  member_id - have one to one relationship with member class
  lastupdateddate
  latupdatedby
}

当我 persist/update 学生详细信息时,地址相关信息未正确插入或 updated.When 我检查插入查询触发成员,然后学生 table 在地址 table.但是,在对地址 table 的插入查询中,member_id 值即将出现,因为未填充此唯一地址 table 的 null.Because。

Entity structure is is as given below

public abstract class Member implements Serializable {
}
public class Student extends member implements Serializable {
}
public class Teacher extends member implements Serializable {
}
public class Address implements Serializable {
}

映射如下所示。尝试了各种可用选项。

In member entity class
       @Access(AccessType.PROPERTY)
       @OneToOne(mappedBy="member", cascade=CascadeType.ALL)
       public Address getAddress() {
              return postalAddress;
       }

In  address entity class
       @OneToOne(fetch=FetchType.LAZY)
       @JoinColumn(name = "MEMBER_ID")
       private Address address;

您似乎有 2 个选择:

  1. InheritanceType.JOINED。这几乎就是你所描述的:共同的部分在一个 table 中,不同的部分在不同的 table 中。每次请求 JOIN 都会发生
  2. InheritanceType.SINGLE_TABLE。此处所有数据将存储在单个 table 中,并且将使用描述符来确定记录是针对学生还是针对教师。

就我个人而言,我更喜欢第二个选项,因为你几乎所有的领域都是共同的,而且大多数操作都比较轻,涉及 WHERE,而不是 JOIN