[英]One to Many and Many to One xml mapping in hibernate With Join tables
我並不是在問這些b / w的區別。2。閱讀了休眠文檔之后,我決定實現它們以闡明我的概念。
一對多
1個人與許多地址相關聯
在Person中聲明了保存Address類的對象的Set。
CREATE TABLE person_address
(
person_id integer NOT NULL,
address_id integer NOT NULL,
CONSTRAINT person_address_pkey PRIMARY KEY (person_id, address_id),
CONSTRAINT fk9e2338ea36645cd5 FOREIGN KEY (person_id)
REFERENCES person (person_id) ,
CONSTRAINT fk9e2338eaa1a53d5f FOREIGN KEY (address_id)
REFERENCES address (address_id) ,
CONSTRAINT person_address_address_id_key UNIQUE (address_id)
)
在上述情況下,Hibernate創建了4個約束。
現在看看其他映射。
多對一
許多人鏈接到一個地址
Person類中Address類的引用。
CREATE TABLE person_address
(
person_id integer NOT NULL,
address_id integer NOT NULL,
CONSTRAINT person_address_pkey PRIMARY KEY (person_id),
CONSTRAINT fk9e2338ea246188ab FOREIGN KEY (address_id)
REFERENCES address (address_id) ,
CONSTRAINT fk9e2338eaf88b7809 FOREIGN KEY (person_id)
REFERENCES person (person_id)
)
如您所見,Hibernate創建了3個約束。 由於不同的人鏈接到1個地址,因此PRIMARY KEY是(person_id)完全有意義。
我知道明顯的區別b / w主鍵和唯一關鍵字。
我的問題是為什么Hibernate在第一種情況下將主鍵創建為(person_id,address_id)的組合,即使知道address_id是唯一的並且可以像第二種情況(多對一)一樣用作主鍵。
編輯:
<key column="PERSON_ID" />
<many-to-many column="ADDRESS_ID" unique="true"
class="org.academy.ansar.UnidirectionalOneToManyMappingWithJoinTable.Address" />
指定unique =“ true”會將其從多對多更改為一對多
...我的問題是為什么Hibernate在第一種情況下將主鍵創建為
(person_id, address_id)
組合,即使知道address_id
是唯一的,也可以像第二種情況一樣用(person_id, address_id)
鍵(一) 。
在第一種情況下,表person_address
是在table, person
和address
之間的配對表。 為了使答案真正顯而易見,讓我們保留以下記錄:
人表
1 - PersonA
2 - PersonB
地址表
1 - AddressX
2 - AddressY
現在,我們可以在配對表person_address
使用這些組合:
personId, addressId
1 , 1
1 , 2
2 , 1
2 , 2
// 2 , 2 - impossible due to primary key
那就是答案 :
addressId
不是唯一的 personId
不是 uniq 那就是多少many-to-many
工作...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.