我想在Hibernate(XML映射)中创建一对一的关系。
有许多示例显示如何执行此操作。一个流行的例子是有地址的人。 人员表有一个外键可以解决。为了能够创建没有地址的人员记录,您可以使外键可以为空。
这不是我想要的。我想要相反的。在我的数据库中,我有一个表“商家”和一个表“MerchantSettings”。每个MerchantSettings记录都属于一个商家,因此有一个外键MerchantId。 (通过这种方式,我可以在没有设置的情况下添加商家记录。)
在我的代码中,我有一个具有属性设置的商家类。映射应该是什么样的?
(我不想使用'组件'。表“MerchantSettings”已经拥有它自己的私钥。)
有人知道怎么做吗?
[更新]
因为我现在想要使用Karibasappa G C提出的相同主键,所以我决定在表“Merchants”中添加一个外键。 我只是让它可以为空,因此不需要有MerchantSettings记录(如人/地址示例)。
这不太理想,但我可以使用它。
谢谢大家。
虽然这不完全是我想要的,但Marked Karibasappa G C的回答似乎是正确的,因此我将其标记为已接受的答案。
答案 0 :(得分:1)
根据您的要求,您需要将商家作为关系的所有者。 商家应该有自动生成的主键。
和商家设置应该有一个主键,它是商家表中的外键。
所以,如果上面的理解是正确的,这里是你的映射
merchant.hbm.xml
<hibernate-mapping package="com.kb.model">
<class name="Merchant">
<id name="id" column="id">
<generator class="identity" />
</id>
<property name="name" column="NAME" />
<one-to-one name="merchantsettings" cascade="all"/>
</class>
</hibernate-mapping>
merchantsettings.xml
<hibernate-mapping package="com.kb.model">
<class name="merchantsettings">
<id name="id" column="id">
<generator class="foreign">
<param name="property">merchant</param>
</generator>
</id>
<one-to-one name="merchant" constrained="true"/>
</class>
</hibernate-mapping>