2016-10-31 17 views
0

完全小白在JPA,我得到這個:JPA如何知道如何將列和實體與連接錶鏈接?

三個表:

enter image description here

此外,它描述了他們的關係orm.xml文件:

<one-to-manyname="nombreAtributo"fetch=" {LAZY}"> 
<join-table schema="NOMBRE_SCHEMA" name = "TABLA1_TABLA2"> 
     <join-column name="TABLA1_ID" referenced-column-name="ID" unique="true"/> 
     <inverse-join-column name="TABLA2_ID" referenced-column-name="ID"/> 
    </join-table> 

(這段代碼在Tabla1實體標籤內)。

好的。這個想法是在TABLA1上有一個TABLA2元素的列表,所以我們通過ORM.xml文件「告訴」嘿,nombreAtributo(在TABLA1中)是通過TABLA1_TABLA2關係的結果。TABLA1_ID與ID和TABLA2_ID到ID

我得知我實際上說的是「TABLA1_ID與TABLA1.ID有關,而TABLA2_ID與TABLA2.ID有關」,但我無法理解JPA是如何知道它的。 ?對於名稱

(而且是的,我們正在使用XML的,而不是註解)

回答

1

一切都寫在JoinTable的Javadoc:

註釋類型JoinTable

指定的關聯的映射。它適用於協會的所有方。

因此,根據爲TABLA1實體如下XML映射,該公司擁有的關係有關的實體是TABLA1

<one-to-manyname="nombreAtributo"fetch=" {LAZY}"> 
<join-table schema="NOMBRE_SCHEMA" name = "TABLA1_TABLA2"> 
     <join-column name="TABLA1_ID" referenced-column-name="ID" unique="true"/> 
     <inverse-join-column name="TABLA2_ID" referenced-column-name="ID"/> 
    </join-table> 

joinColumns

(可選)外鍵列引用 擁有該關聯的實體的主表的連接表。 (即該協會的擁有方 )。

那麼,既然TABLA1聯接列TABLA1_ID參考的PK TABLA1擁有的關聯。

inverseJoinColumns

(可選),它引用 不擁有這些關聯的實體的主表中的連接表的外鍵列。 (即協會的反面)。

所以,逆連接列引用的TABLA2的PK,因爲TABLA2沒有自己的關聯。

+0

謝謝!由於使用了xml而不是註釋,所有內容都難以找到。以防萬一有人發現這一點,你提到的Javadoc似乎是這樣的:歡迎您訪問http://docs.oracle.com/javaee/7/api/javax/persistence/JoinTable.html – Neuromante

+0

。完全正確,帶有註釋,IDE中的javadoc助手非常有幫助,並且可以快速學習。我編輯了我的答案以添加javadoc鏈接 – davidxxx