我有一个包含子集合的父实体。 父母已经坚持了。对儿童的级联设置为“AllDeleteOrphan”。父实体与会话分离。子实体的ID生成器设置为“sequence”。
父实体的映射是:
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
<class name="Meldungtmop" table="TBLMELDUNGTMOP">
<id name="Lngmeldungid" type="Int64">
<column name="LNGMELDUNGID" not-null="true" precision="10" scale="0" sql-type="NUMBER" />
<generator class="foreign">
<param name="property">Meldungtm</param>
</generator>
</id>
<version name="Lngversion" type="Int64">
<column name="LNGVERSION" default="0" not-null="false" precision="10" scale="0" sql-type="NUMBER" />
</version>
<bag name="Meldungtmopkomplikations" inverse="true" cascade="all-delete-orphan" order-by="LNGKOMPLIKATIONID ASC" generic="true">
<key>
<column name="LNGMELDUNGID" />
</key>
<one-to-many class="Meldungtmopkomplikation" />
</bag>
</class>
</hibernate-mapping>
子实体的映射是:
<hibernate-mapping default-cascade="save-update" xmlns="urn:nhibernate-mapping-2.2">
<class name="Meldungtmopkomplikation" table="TBLMELDUNGTMOPKOMPLIKATION">
<id name="Lngkomplikationid" type="Int64">
<column name="LNGKOMPLIKATIONID" not-null="true" precision="10" scale="0" sql-type="NUMBER" />
<generator class="sequence">
<param name="sequence">SEQ_TBLMELTMOPKOMP</param>
</generator>
</id>
<version name="Lngversion" type="Int64">
<column name="LNGVERSION" default="0" not-null="false" precision="10" scale="0" sql-type="NUMBER" />
</version>
<many-to-one name="Meldungtmop" class="Meldungtmop" cascade="none">
<column name="LNGMELDUNGID" not-null="true" precision="10" scale="0" sql-type="NUMBER" />
</many-to-one>
</class>
</hibernate-mapping>
现在,问题是:当我调用session.Update(parent)时,子实体获取从NHibernate分配的ID,这是错误的,因为我只想将父实体放入会话。然后,当然,调用session.Flush()会抛出“row was updated ...”异常。