我在公司类和CompanySettings类之间建立了一对一的关系。当我创建一个新的Company对象时,(在Company的构造函数中为其Settings属性创建了一个CompanySettings对象),然后
SaveOrUpdate(session, companyObject)
我希望INSERT从公司级联到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>
答案 0 :(得分:5)
您是否尝试在one-to-one映射中指定cascade="all"
?
答案 1 :(得分:2)
在公司映射中设置一对一的级联属性。
但是,另一个说明: 您是否考虑将CompanySettings映射为公司的“组件”而不是单独的实体?
是不是'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个单独的对象(公司和公司设置,公司将有'公司设置'对象,但设置将保存在公司表中。)
或者,为什么将CompanySettings放在单独的表中有什么特殊原因?我的意思是,它是一对一的关系,所以这完全没有必要(甚至是一种不好的做法:))。