[英]One to one mapping in Hibernate?
假設我們有兩個數據庫表Instructor
和Instructor_Details
。 它們具有一對一的關系,因此每個講師可以具有一個講師詳細信息,而一個講師詳細信息僅與一個講師相關聯。
在純數據庫而言, Instructor
表應該是父Instructor_Details
表的主鍵Instructor
表應作為外鍵Instructor_Details
表。
我正在學習Hibernate和大部分的例子@OneToOne
互聯網上已經修改使得表Instructor_Details
主鍵被用作外鍵Instructor
表,這似乎是矛盾的Instructor
應該是父Instructor_Details
。
我如何能實現在這樣,我可以使用的主鍵,最好的辦法兩個實體Instructor
為外鍵Instructor_Details
。 另外,請在我想要的實現中解釋獲取類型和級聯。 帶有代碼的示例將非常有幫助。
編輯
讓我們說這些表的屬性如下:
講師(instructor_id(主鍵),名字,姓氏)
Instructor_Details(detail_id(主鍵),dob,地址,instructionor_id(教師表中的外鍵))
因為從純數據庫的角度來講,您正在將其建模為父/子,所以您被OneToMany所困擾。 在這種情況下,我做了什么,所以我可以保持這種關系,並利用諸如級聯刪除之類的優勢。在實體本身上具有輔助方法。 由於Hibernate使用反射,因此您實際上不需要為私有成員實現公共getter和setter。
因此,例如,您的InstructorDetails Instructor
類的訪問器可以如下所示:
public class Instructor {
...
@OneToMany
private List<InstructorDetails> instructorDetails;
public Optional<InstructorDetails> getInstructorDetails() {
if (instructorDetails == null || instructorDetails.size() == 0) {
return Optional.empty();
} else if (instructorDetails.size() > 1) {
// Optional raise if you want to be aware of corrupt Instructors that have many details
throw Exception("There's corrupt data");
} else {
return Optional.of(instructorDetails.get(0));
}
}
...
}
說得通? 與add相同...您可以有一個只包含單個詳細信息的add,檢查是否已經有一個add並且覆蓋或拋出,但是在內部它處理列表。 與Instructor
打交道的人永遠不會知道里面有保存他們的名單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.