2014-09-28 88 views
1

一個多到一的關係我有兩個實體A和B具有以下關係映射與複合備用鍵

  1. A中的外鍵由兩列(複合)不屬於的到B(備用密鑰)的主鍵;
  2. A和B之間的基數是[*] - [0..1],也就是說,A中的外鍵可以爲null,多對一關係是可選的;
  3. 這種關係是單向的A - > B。我想用A加載B。

如何爲A和B編寫hibernate映射.hbm(hibernate 3,no annotations)?

回答

2
  1. 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> 
    
  2. not-found="ignore"多到一個屬性:

未找到(可選 - 默認爲例外):指定如何處理引用缺失行的外鍵。忽略會將 缺失的行視爲空關聯。

  • 參見fetch="join"多到一個屬性:
  • fetch(可選 - 默認選擇):間選擇在外連接 抓取或順序選擇讀取。

    +0

    您能否提供第3點的權威參考?我對hibernate和JPA中的默認獲取類型感到困惑。 – ewernli 2014-10-05 07:29:13

    +0

    需求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

    +0

    您提供的鏈接表示延遲選擇作爲默認值。同樣在這裏https://developer.jboss.org/wiki/AShortPrimerOnFetchingStrategies這似乎與你以前的評論相抵觸。你能澄清嗎? – ewernli 2014-10-06 05:30:16