您能否告訴我如何構建下面的表/類以避免循環引用?我有一個「學士」學位類中定義如下:JPA2在同一類中構造OneToOne和OneToMany
@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
...
}
這是爲了表示其具有學士學位的細節一個研究記錄學士學位。如果申請人指定他們已經完成了學士學位,他們可以指定一個或多個在先和交換學習。學士學位加上一個前度結果的一個例子如下:
bachelor id | fk_bachelor 10003 | 10000
study id | title | fk_prior 10000 | Bachelor of Arts | 10001 | Prior Degree | 10003
這似乎是工作,除非我需要刪除的表項的罰款。我還收到了來自編譯器的循環引用的警告。所以我不能先從學士學位中刪除,因爲研究引用了fk_prior,並且我不能先從研究中刪除,因爲學士會引用它。我猜這是不好的做法,像這樣構造它。
您顯示的代碼沒有任何循環引用。 – Perception
你已經用'CascadeType.ALL'屬性定義了從'學士'到'學習'的'@ OneToMany'關係,所以當你刪除一個'學士'時,所有連接的'學習'被刪除,不涉及循環引用。 – remigio
我正在使用Postgres數據庫,當我嘗試「從學士學位刪除」時,我得到 錯誤:更新或刪除表「學士」違反外鍵約束「fk_general_details_fk_bachelor」在表「general_details」 詳細信息:Key(id)= (10003)仍然從表「general_details」引用。 從 中的研究結果中刪除錯誤:表「學習」上的更新或刪除違反了表「學士」上的外鍵約束「fk_bachelor_fk_study」 詳細信息:鍵(id)=(10000)仍從表「學士」引用。 – Novarse