Hibernateで継承を達成しようとしています。Hibernate継承、親クラスはデシリアに基づいて子または親である必要があります
- 決定者が 'K' である場合は、4:
後は
//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}
ユースケース、ここでスキーマ
あるクラスとは何か、ですレコードを保存する必要があります.4つの親レコードは、 dded
- deciderが 'X/Y/Z'で、4レコードを保存する必要がある場合は、1つの親レコードと4つのChildX/ChildY/ChildZレコードを追加する必要があります。決定者が「K」であると決定者が「X/Y/Z」
しかし、とあるとき、それは親として行動しなければならないときただし、親テーブルは、単一の子として扱われるべきである
判定子が「X/Y/Z」のときは、ChildX/ChildY/ChildZに4レコード、親テーブルにレコードがありません。
また、上記のレコードを取得する方法。
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);
は今、私はエラーを取得しています。..追加するには
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}
......
:
Application error : com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'Child' doesn't exist
親は親を拡張しませんか?そして、「親」が自分の上に存在できない場合は、抽象的にする必要があります。 –
私のクエストを更新しました。はい、子は親を拡張します –