实现以下要求的最佳 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 个选择:
InheritanceType.JOINED
。这几乎就是你所描述的:共同的部分在一个 table 中,不同的部分在不同的 table 中。每次请求 JOIN
都会发生
InheritanceType.SINGLE_TABLE
。此处所有数据将存储在单个 table 中,并且将使用描述符来确定记录是针对学生还是针对教师。
就我个人而言,我更喜欢第二个选项,因为你几乎所有的领域都是共同的,而且大多数操作都比较轻,涉及 WHERE
,而不是 JOIN
。
有以下几种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 个选择:
InheritanceType.JOINED
。这几乎就是你所描述的:共同的部分在一个 table 中,不同的部分在不同的 table 中。每次请求JOIN
都会发生InheritanceType.SINGLE_TABLE
。此处所有数据将存储在单个 table 中,并且将使用描述符来确定记录是针对学生还是针对教师。
就我个人而言,我更喜欢第二个选项,因为你几乎所有的领域都是共同的,而且大多数操作都比较轻,涉及 WHERE
,而不是 JOIN
。