关联Hibernate映射

关联Hibernate映射,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我想在Hibernate中创建一对一的关系(XML映射) 有许多例子说明了如何做到这一点。一个流行的例子是有地址的人。 person表有一个要寻址的外键。为了能够创建没有地址的个人记录,您将外键设为空 那不是我想要的。我想要相反的结果。在我的数据库中有一个表“Merchants”和一个表“MerchantSettings”。每个MerchantSettings记录都属于一个商户,因此具有外键MerchantId。(这样,我可以添加无需设置的商户记录。) 在我的代码中,我有一个具有属性设置的类别M

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

有许多例子说明了如何做到这一点。一个流行的例子是有地址的人。 person表有一个要寻址的外键。为了能够创建没有地址的个人记录,您将外键设为空

那不是我想要的。我想要相反的结果。在我的数据库中有一个表“Merchants”和一个表“MerchantSettings”。每个MerchantSettings记录都属于一个商户,因此具有外键MerchantId。(这样,我可以添加无需设置的商户记录。)

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

(我不希望使用“组件”。表“MerchantSettings”具有自己的私钥。)

有人知道怎么做吗

[更新]

因为我现在确实希望使用与Karibasappa G C建议的主键相同的主键,所以我决定在表“Merchants”中添加一个外键。 我只是将其设置为空,因此不需要有MerchantSettings记录(如person/address示例)

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

谢谢大家


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

根据您的要求,您需要让商户成为关系的所有者。 商户应具有自动生成的主键

和merchantsettings应该有一个主键,它是来自merchant表的外键

因此,如果上述理解是正确的,那么这里是您的映射

 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>
merchant.hbm.xml
merchantsettings.xml
商人

向我们展示您的尝试。这对您没有帮助吗?我想我在什么地方看到了这个解决方案。但是为什么商品设置需要相同的主键呢?这是实现映射的唯一方法吗?这不是唯一的方法,但这样您在merchantsettings中就不会有用于映射的额外密钥…您也可以使用单独的密钥..出于好奇,如果我不想使用Merchant的主键,但我确实想与Merchant建立一对一的关系,我需要更改什么(并让MerchantSettings拥有自己的私钥MerchantSettingsId)?然后在MerchantSettings.hbm.xml中将您的主键作为生成器而不是外键