关联Hibernate映射

时间:2014-04-28 14:47:46

标签: hibernate hibernate-mapping

我想在Hibernate(XML映射)中创建一对一的关系。

有许多示例显示如何执行此操作。一个流行的例子是有地址的人。 人员表有一个外键可以解决。为了能够创建没有地址的人员记录,您可以使外键可以为空。

这不是我想要的。我想要相反的。在我的数据库中,我有一个表“商家”和一个表“MerchantSettings”。每个MerchantSettings记录都属于一个商家,因此有一个外键MerchantId。 (通过这种方式,我可以在没有设置的情况下添加商家记录。)

在我的代码中,我有一个具有属性设置的商家类。映射应该是什么样的?

(我不想使用'组件'。表“MerchantSettings”已经拥有它自己的私钥。)

有人知道怎么做吗?

[更新]

因为我现在想要使用Karibasappa G C提出的相同主键,所以我决定在表“Merchants”中添加一个外键。 我只是让它可以为空,因此不需要有MerchantSettings记录(如人/地址示例)。

这不太理想,但我可以使用它。

谢谢大家。

虽然这不完全是我想要的,但Marked Karibasappa G C的回答似乎是正确的,因此我将其标记为已接受的答案。

1 个答案:

答案 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>