5

我在 Company 类和 CompanySettings 类之间存在一对一的关系。当我创建一个新的 Company 对象时(在 Company 的构造函数中为其 Settings 属性创建一个 CompanySettings 对象),然后

SaveOrUpdate(session, companyObject)

我希望 INSERT 从 Company 级联到 CompanySettings。但是,除非我在 CompanySettings 对象上显式调用 SaveOrUpdate,否则不会发生这种情况。

映射文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`>
  <class name="AST.Domain.Company, AST.Domain" table="Companies">
    <id name="EntityID" column="CompanyId">
      <generator class="guid.comb" />
    </id>
    <property name="CompanyName" />
    . . .
    <one-to-one name="Settings" class="AST.Domain.CompanySettings, AST.Domain"
                constrained="true" lazy="false" />
  </class>
</hibernate-mapping>

我的公司设置类的映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="AST.Domain.CompanySettings, AST.Domain" table="CompanySettings">
    <id name="EntityID" column="CompanyId">
      <generator class="foreign">
        <param name="property">Company</param>
      </generator>
    </id>
    <property name="MaxUsers" />
    <one-to-one name="Company" class="AST.Domain.Company, AST.Domain" />
  </class>
</hibernate-mapping>
4

2 回答 2

5

您是否尝试过指定一对一cascade="all"映射?

于 2009-05-03T19:26:50.680 回答
2

在公司映射中设置一对一的级联属性。

但是,另一方面:您是否想过将 CompanySettings 映射为 Company 的“组件”而不是单独的实体?

是不是'CompanySettings' 是一个'值对象',并且应该更好地映射为一个组件?

通过这样做,您可以将 CompanySettings 值与“Company”放在同一个表中,但它将被视为单独的类。

由于这是一对一的映射,我认为它也是您的数据模型的更好选择。

然后,您的映射将如下所示:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"`>
  <class name="AST.Domain.Company, AST.Domain" table="Companies">
    <id name="EntityID" column="CompanyId">
      <generator class="guid.comb" />
    </id>
    <property name="CompanyName" />
    . . .
    <component name="Settings" class="AST.Domain.CompanySettings, AST.Domain">
        <property name="MaxUsers" />
    </component>
  </class>
</hibernate-mapping>

您将确实有 2 个单独的对象(Company & CompanySettings,并且 Company 将有一个“Companysettings”对象,但设置将保存在 Company 表中)。

或者,您将 CompanySettings 放在单独的表中是否有任何特殊原因?我的意思是,这是一对一的关系,所以这完全没有必要(恕我直言,甚至是一种不好的做法:))。

于 2009-05-03T19:29:47.943 回答