現在のプロジェクトでは、次のような継承構造があります。
@Entity
@Table(name="groups")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorValue("G")
@DiscriminatorColumn(name="group_type")
public class Group{ //some annotations removed
private Long id;
private String name;
private Set<Subject> subjects;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="parent_group_id")
private Group parent; ##### tree parent ####
@OneToMany(cascade=CascadeType.ALL, mappedBy="parent")
private Set<Group> subGroups; ##### tree children #####
...
}
私Group
のオブジェクトは、他のオブジェクトのリストを含むことで、ツリーのような構造を持つことができGroup
ます。一部のグループは少し特殊なので、このクラスを拡張する 2 番目のクラスがあります。
@Entity
@DiscriminatorValue("C")
@Table(name="fix_groups")
public class FixGroup extends Group{
private Layout lay;
private Set<Person> instr;
...
}
結合されたマルチテーブルアプローチを使用しようとしました(ここで説明されているように: http://en.wikibooks.org/wiki/Java_Persistence/Inheritance#Joined.2C_Multiple_Table_Inheritance )が、のような非抽象スーパークラスでは機能しないようGroup
です! 次の例外が発生します。
Caused by: java.lang.ClassCastException: org.hibernate.mapping.JoinedSubclass
cannot be cast to org.hibernate.mapping.RootClass
抽象として宣言し、それを拡張するだけGroup
の新しいクラスを作成する以外に解決策はありますか? Group2
もし私がそうしたとしても、この自己参照Set<Group> subGroups
はまだ問題を引き起こしますか?