[英]Hibernate, OneToOne single foreign key references
我的數據庫技能有點生銹,所以學習Hibernate有點困難。
簡而言之,我一直在閱讀一對一,一對多,多對多的內容,這是我從青年時代就了解的內容:
一對一:-表A鏈接到表B中的另一行,並且表A中的行數必須等於表B中的行數。
一對多:-每個公司可以有很多員工。
多對多:-許多醫生可以擁有/共享各種患者。 (無雙關語)。
假設我有以下表格,用於委托方客戶模型
[id [pk],全名(字符),年齡(int),地址(字符),sendFlowers(布爾值),country_id [fk],whenDead_id [fk]]
1,'Martin Jensen',91,'Notlucky Street 4',false,2,1
2,'Killer Klaus',67,'Die-Hard Strasse 9',真實,1,2
2,'Bingo Man',46,'Secret Address',true,1,2
表:國家
[id [pk],名稱(字符)]
1,“德國”
2,“朝鮮”
表:WhenDead
[id [pk],actionToTake(char)]
1,“忽略/不可能取件”
2,“創建/模仿親屬並領取保險”
在正常情況下,如果需要這些表中的某些信息,則只需使用普通SQL對兩個外鍵進行聯接。 (fx說明,而不僅僅是ID)。 每個人只能連接到一個國家和一個WhenDead表,但是,為了避免重復,多個人當然應該能夠引用相同的外鍵值。
我試圖在Hibernate中使用@OneToOne批注,並將這兩個表的列名用作Entity上的外鍵ID。 它起作用了,但是似乎與OneToOne的含義背道而馳……“一個表中的每一行在另一張表中都有對應的行”和“行數必須在兩個表中都匹配”。
使用一對多或多對多似乎是不自然的。
有人可以將我推向正確的方向嗎?還是我應該繼續講OneToOne,每個印度的冬眠教程都說“除非有很大的設計缺陷,否則從不使用”
您弄錯了,卻忘記了一種關聯:ManyToOne。
讓我們舉個例子:
從A到B的OneToOne:A具有0或一個B,並且B不能與多個As關聯。 因此,兩個表中的行數不必相同。 示例:一輛汽車有一個單板號(如果尚未售出,則為0)。 OneToOne確實非常罕見,我很難找到一個例子。
OneToMany:一個A具有0、1或幾個B。 示例:一家公司有很多員工。
ManyToOne:A具有0或一個B,並且B可以與多個As關聯。 例如:一個人有一個父親(一個父親可能有幾個孩子)。
ManyToMany:A具有0、1或幾個B,並且B可以與0,一個或多個As關聯。 典型示例:一個學生有很多課程,然后是幾名學生。
因此,對於表/實體,您具有以下關聯:
確實,有幾個人住在同一個國家,但一個人住在0或1個國家。 有幾個人可能希望被火化(不確定英語是否正確),但是一個人既不能被火化又不能被埋葬。
當然,您可以選擇使這些關聯成為雙向的,或者甚至僅在另一個方向上實現它們。 在這種情況下,
簡而言之,每當您從一個表到另一個表都具有外鍵時,就會具有ManyToOne或OneToOne關聯。 如果您可以對外鍵施加唯一約束,那就是一個OneToOne,因為可以保證第一個表的兩行不能引用目標表的同一行。 否則,它是ManyToOne。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.