如何在外键上进行双向一对一关联

时间:2015-09-08 12:55:53

标签: java hibernate

阅读一些hibernate文档,我偶然发现了这种模式:

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <many-to-one name="address" 
        column="addressId" 
        unique="true"
        not-null="true"/>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
    <one-to-one name="person" 
        property-ref="address"/>
</class>

from jboss hibernate doc

乍一看,这看起来非常简单。每个人都有一个且只有一个地址,每个地址都有一个人。

但是在数据库中,这种模式允许一个地址有多个Person引用它,hibernate如何在没有列表的情况下解析这个映射? 一对一如何在多对一领域拥有属性参考?我认为应该只有多对一的&lt; =&gt;一对多或一对一&lt; =&gt;一对之一。

编辑:尽管似乎有可能(如果不是在语义上正确的话)做一对一的&lt; =&gt;一对多映射,我的问题是关于多对一&lt; =&gt;一到一个

我知道在这个网站上已经有一对一与多对一的答案,但我在这些帖子中没有找到我的问题的答案。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

如果您在数据库中有唯一约束,那么两个人就不可能拥有相同的地址。

但是,如果缺少约束并且确实存在多个具有相同地址的人,则此映射不正确,并且在访问person关联时可能会出现异常或错误/不可预测的结果{1}}实体。