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

Java 使用复合备用键映射多对一关系,java,hibernate,jpa,orm,hibernate-mapping,Java,Hibernate,Jpa,Orm,Hibernate Mapping,我有两个实体A和B具有以下关系 A中的外键由两列(复合)组成,不属于B的主键(备用键) A和B之间的基数为[*]-[0..1],即A中的外键可以为null,多对一关系是可选的 关系是单向的A-->B。我希望在A中使用联接急切地加载B 如何为A和B编写hibernate mappings.hbm(hibernate 3,无注释)?您可以在父类(例如A)中创建复合标识符属性: 客户端通过多对一关联引用父级: <many-to-one name="parent"

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

  • A中的外键由两列(复合)组成,不属于B的主键(备用键)
  • A和B之间的基数为[*]-[0..1],即A中的外键可以为null,多对一关系是可选的
  • 关系是单向的A-->B。我希望在A中使用联接急切地加载B

  • 如何为A和B编写hibernate mappings.hbm(hibernate 3,无注释)?

    您可以在父类(例如A)中创建复合标识符属性:

    
    
    客户端通过多对一关联引用父级:

        <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>
    
    
    
  • 请参见多对一属性:
  • 找不到(可选-默认为异常):指定外部 将处理引用缺少行的键。忽略将处理一个问题 缺少作为空关联的行

  • 请参见多对一属性:
  • fetch(可选-默认为select):在外部联接之间进行选择 取数或顺序选择取数


    你能为第3点提供权威参考吗?我对hibernate和JPA中的默认获取类型感到困惑。需求2是通过“not found”属性来解决的,而需求3是hibernate如何管理*-对一关联。默认情况下,所有多对一都会被急切地获取。只定义了渴望和懒惰,每个JPA实现定义了渴望使用的模式(JOIN或SELECT)。对于某些Hibernate获取示例,您提供的链接指示默认为select的lazy。这似乎与你之前的评论相矛盾。你能澄清一下吗?
        <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>