NHibernate :(一或零)到(一或零)映射

时间:2012-06-24 19:54:15

标签: hibernate nhibernate nhibernate-mapping hibernate-mapping

我有两个实体FooBar,如下所示:

public class Foo
{
    public virtual Guid FooID { get; set; }
    public virtual Bar MyBar { get; set; }
}

public class Bar
{
    public virtual Guid BarID { get; set; }
    public virtual Foo MyFoo { get; set; }
}

这两个实体可以彼此独立存在,但有时它们是相关的,当发生这种情况时,我想确保它们在持久层中链接。

我希望我的桌子类似于:

create table Foo (
    FooID int primary key,
    -- other stuff
);

create table Bar (
    BarID int primary key,
    FooID int null references Foo(FooID) on delete no action on update no action
);

...并且NHibernate能够创建它们之间的关系。

我如何映射(XML首选)?

1 个答案:

答案 0 :(得分:6)

所以@JBNizet以他讽刺和讽刺的方式指出,就Hibernate和NHibernate而言,零或一对零或一对关系被认为是一种可以为空的双向一对一关系;因此,根据http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#assoc-bidirectional-121,映射将如下所示:

<class name="Foo">
    <id name="FooID" column="FooID">
        <generator class="guid" />
    </id>
    <one-to-one name="MyBar" property-ref="MyFoo" />
</class>

<class name="Bar">
    <id name="BarID" column="BarID">
        <generator class="guid" />
    </id>
    <many-to-one name="MyFoo" column="FooID" unique="true" not-null="false" />
</class>

(......我认为。欢迎编辑并澄清。)