什么“property-ref”属性在hibernate的“一对一”元素标签中做什么?

时间:2015-01-16 06:20:18

标签: java hibernate hibernate-mapping one-to-one bidirectional

我有两个班级员工和项目,我正在做一对一的关系,而且它没有属性 - 请参阅下面的内容:

<one-to-one name="project" class="com.hibernate.practice.entitytype.Project" <!--property-ref="employee"--> cascade="save-update"> </one-to-one>

你可以看到我已经评论了property-ref

我定义的项目(类)映射文件的另一面:

<many-to-one name="employee" class="com.hibernate.practice.entitytype.Employee" column="EMP_ID" unique="true" ></many-to-one>

现在的定义是什么: property-ref(可选):连接到此外键的关联类的属性的名称。如果未指定,则使用关联类的主键。

我没有指定“property-ref”,但是项目表中的EMP_ID列仍然填充了Employee ID(主键)我希望它将填充项目ID(主键),如定义所示(突出显示在胆大)。 请解释有什么问题,当我添加它或不添加此属性-ref时,我看不出有什么区别? 为什么它处于休眠状态?我在等我回答。

1 个答案:

答案 0 :(得分:1)

  

但是项目表中的EMP_ID列仍然填充了   员工ID(主键)。我原以为它会填满   项目ID(主键)如定义所示(以粗体突出显示)。

应使用Employee.ID填充Project.EMP_ID。这就是外键的工作方式。

我不确定为什么你希望Project.EMP_ID指向Project.ID。

如果项目和员工don't share the primary key

<one-to-one name="person" class="Person"/>

<one-to-one name="employee" class="Employee" constrained="true"/>

您需要将property-ref用于方向关联的反面

<one-to-one name="employee" class="Employee" property-ref="person"/>

在第二个示例中,子表中只有一个FK指向父表。在这种情况下,你需要指示Hibernate关联的哪一方是拥有者(通常它是孩子的​​一方)。