使用复合备用键映射多对一关系

时间:2014-09-28 18:37:39

标签: java hibernate jpa orm hibernate-mapping

我有两个具有以下关系的实体A和B

  1. A中的外键由两列(复合)组成,不属于B的主键(备用键);
  2. A和B之间的基数是[*] - [0..1],也就是说,A中的外键可以为空,多对一关系是可选的;
  3. 关系是单向A - > B.我想通过加入在A中热切地加载B.
  4. 如何为A和B编写hibernate映射.hbm(hibernate 3,没有注释)?

1 个答案:

答案 0 :(得分:3)

  1. 根据this article,您可以在父类中创建复合标识符属性(例如A):

    <properties name="ParentNaturalId">
        <property name="prop1" column="prop_1" />
        <property name="prop2" column="prop_2" />
    </properties>
    

    客户通过这种多对一关联引用父:

    <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"多对一属性:

  3.   

    not-found(可选 - 默认为exception):指定外来的方式   将处理引用缺失行的键。忽略会对待一个   缺少行作为空关联。

    1. 请参阅fetch="join"多对一属性:
    2.   

      fetch(可选 - 默认选择):在outer-join之间选择   提取或顺序选择提取。