我不問這些差異b/w這些2.閱讀hibernate文檔後,我決定實施它們以闡明我的概念。一對多和多對一的xml映射在休眠與連接表
一個鏈接到多個地址
一套持有類地址的對象很多
1人在個人聲明。
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個約束。
現在看看其他映射。
多對一
許多人鏈接到一個地址
Address類的Person類的引用。
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是唯一的並且可以像第二種情況一樣用作主鍵(Many到一)。
編輯:
<key column="PERSON_ID" />
<many-to-many column="ADDRESS_ID" unique="true"
class="org.academy.ansar.UnidirectionalOneToManyMappingWithJoinTable.Address" />
指定唯一= 「真」,從多到多對一,一對多改變它
我絕不會問你多少次。第一種情況明確提到是一對多,Hibernate創建了4個約束,這裏也粘貼它: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_id), CONSTRAINT person_address_address_id_key UNIQUE(address_id)。 ofcourse address_id是獨特的每個休眠。 – 2014-09-03 13:30:24
由Hibernate創建的第一個表具有所有標識符,它是多對多的。其實作爲第二,但我認爲你犯了一個錯誤。如果我錯了,好的,但是你能否擴展你的答案並顯示導致這種情況的映射? – 2014-09-03 13:34:43