在保存" parent"时,我遇到了我想避免NH更新我的相关表格的情况。在下面的映射XML中,可以看出我使用了继承 - 其中基类(表)是BaseItem(BaseItemTable),派生类(表)是DerivedClass(DerivedItemTable)。
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/inheritance.html#inheritance-tableperclass
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="BaseItem" table="BaseItemTable">
<id name="Id" column="Id" type="Guid">
<generator class="guid" />
</id>
<property name="ModuleId" column="ModuleId" type="Guid" not-null="true" />
<property name="CreateDate" column="CreateDate" type="datetime" not-null="true" />
<property name="UpdateDate" column="UpdateDate" type="datetime" not-null="true" />
<joined-subclass name="DerivedClass" table="DerivedItemTable" >
<key column="Id"/>
<many-to-one name="Job" column="JobId" access="readonly" update="false" insert="false" class="Job"/>
<property name="Filename" column="Filename" type="string" length="255" not-null="true"/>
</joined-subclass>
</class>
</hibernate-mapping>
问题是:当我创建DerivedClass的新实例时,在构造期间,我还要求DB获取默认作业 - 并将其放在DerivedClass.Job属性中。实际上,该作业用作所有派生类的模板。
在运行时期间,我更改DerivedClass.Job属性,然后将DerivedClass保存到数据库。结果是正在更新默认作业的属性,尽管在映射XML中显式声明了update="false"
。