试图在Hibernate中实现继承。Hibernate继承,父类应该是基于决定者的子类或父类
以下是架构
这里是什么类是,
//Grand Parent Class
@Entity
@Table(name="grand_parent")
public class GrandParent{//consider @id}
//Parent Class
@Entity
@Table(name = "parent")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "decider", discriminatorType = DiscriminatorType.STRING)
public class Parent{//consider @id}
//ChildX class
@Entity
@Table(name = "childX")
@PrimaryKeyJoinColumn(name="id")
@DiscriminatorValue("X")
public class ChildX() extends Parent{//consider value}
//ChildY class
@Entity
@Table(name = "childY")
@PrimaryKeyJoinColumn(name="id")
@DiscriminatorValue("Y")
public class ChildY extends Parent(//consider value){}
//ChildZ class
@Entity
@Table(name = "childZ")
@PrimaryKeyJoinColumn(name="id")
@DiscriminatorValue("Z")
public class ChildZ() extends Parent{//consider value}
使用案例:
- 如果判定为 'K',和4记录需要保存,那么4个父记录应该是a dded
- 如果决定者是'X/Y/Z',并且需要保存4条记录,那么应该添加1条父记录和4条ChildX/ChildY/ChildZ记录。
然而,父表应该被视为一个孩子时,决胜局是“K”,当判定为“X/Y/Z”
但它必须充当父上面的类图中,每当决策者为'X/Y/Z'时,4个记录保存在ChildX/ChildY/ChildZ中,父表中没有记录。
另外如何检索上面的记录。
EDITS
@Entity
@Table(name="grand_parent")
public class GrandParent{
@OneToMany(mappedBy = "parentRecord",
fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.DELETE)
private List<parent> parentList;
}
//Parent Class
@Entity
@Table(name = "parent")
public class Parent{
@ManyToOne()
@JoinColumn(name = "fk_gp_id")
private GrandParent parentRecord;
@OneToMany(mappedBy = "childrecord",
fetch = FetchType.LAZY,
cascade = CascadeType.ALL)
@Cascade(org.hibernate.annotations.CascadeType.DELETE)
private List<Child> childList;
}
@Entity
@DiscriminatorColumn(name = "decider", discriminatorType = DiscriminatorType.STRING)
public abstract class Child(){
@ManyToOne(optional = false)
@JoinColumn(name = "fk_parent_id")
private parent childrecord;
}
//ChildX class
@Entity
@Table(name = "childX")
@DiscriminatorValue("X")
public class ChildX() extends Parent{//consider value}
......
要添加..
GrandParent gp = new GrandParent();
Parent p = new Parent();
ChildX ch = new ChildX();
ch.setChildrecord(p);
p.setChildList(//Array added ch);
p.setParentRecord(gp);
gp.setParentList(//Array added p);
persist(gp);
现在我得到一个错误:
Application error : com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'Child' doesn't exist
孩子们不应该延长家长吗?如果'''Parent'''不能独立存在,你应该把它抽象出来。 –
更新了我的任务。是孩子延伸父母 –