1
一個多到一的關係我有兩個實體A和B具有以下關係映射與複合備用鍵
- A中的外鍵由兩列(複合)不屬於的到B(備用密鑰)的主鍵;
- A和B之間的基數是[*] - [0..1],也就是說,A中的外鍵可以爲null,多對一關係是可選的;
- 這種關係是單向的A - > B。我想用A加載B。
如何爲A和B編寫hibernate映射.hbm(hibernate 3,no annotations)?
一個多到一的關係我有兩個實體A和B具有以下關係映射與複合備用鍵
如何爲A和B編寫hibernate映射.hbm(hibernate 3,no annotations)?
據this article,您可以創建在父類(如A)的複合標識屬性:
<properties name="ParentNaturalId">
<property name="prop1" column="prop_1" />
<property name="prop2" column="prop_2" />
</properties>
和客戶端通過這麼多-to-one關聯引用父:
<many-to-one name="parent" class="B" not-null="false" not-found="ignore" property-ref="ParentNaturalId" fetch="join">
<column name="b_prop_1" />
<column name="b_prop_2" />
</many-to-one>
見not-found="ignore"多到一個屬性:
未找到(可選 - 默認爲例外):指定如何處理引用缺失行的外鍵。忽略會將 缺失的行視爲空關聯。
fetch(可選 - 默認選擇):間選擇在外連接 抓取或順序選擇讀取。
您能否提供第3點的權威參考?我對hibernate和JPA中的默認獲取類型感到困惑。 – ewernli 2014-10-05 07:29:13
需求2由「not-found」屬性解決,而3是Hibernate如何管理*一對一關聯。所有「多對一」默認情況下都是熱切地提取的。 [JPA](http://docs.oracle.com/javaee/6/api/javax/persistence/FetchType.html)只定義了EAGER和LAZY,每個JPA實現定義了用於EAGER(JOIN或SELECT)的模式。 [檢查這篇文檔](http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/)瞭解一些Hibernate提取示例。 – 2014-10-05 08:11:24
您提供的鏈接表示延遲選擇作爲默認值。同樣在這裏https://developer.jboss.org/wiki/AShortPrimerOnFetchingStrategies這似乎與你以前的評論相抵觸。你能澄清嗎? – ewernli 2014-10-06 05:30:16