循環参照を避けるために、次のテーブル/クラスをどのように構成するか教えてください。私は「学士」の学位クラスで次のように定義しています。
@Entity
public class Bachelor {
...
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "fk_bachelor")
private Study study;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "fk_prior")
private List<Study> priorStudies;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "fk_exchange")
private List<Study> exchangeStudies;
...
}
@Entity
class Study {
private String title;
private String placeOfStudy;
etc
...
}
これは、学士号の詳細について1つの研究レコードを持つ学士号を表すためのものです。申請者が学士号を取得したことを指定した場合は、1つ以上の事前調査と交換調査を指定できます。学士号と1つの以前の学位の結果の例は次のとおりです。
学士 id | fk_bachelor 10003 | 10000
勉強 id | タイトル| fk_prior 10000 | 文学士| 10001 | 事前学位| 10003
テーブルからアイテムを削除する必要がある場合を除いて、これは正常に機能しているようです。また、コンパイラから循環参照があることについての警告を受け取りました。したがって、Studyがfk_priorによって参照しているため、最初に学士号から削除することはできません。また、学士号が参照しているため、Studyから最初に削除することはできません。このように構成するのは良い習慣ではないと思います。