NHibernate:Session.Update为未保存的子实体分配ID

时间:2018-03-21 09:13:20

标签: hibernate session nhibernate cascade

我有一个包含子集合的父实体。 父母已经坚持了。对儿童的级联设置为“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 ...”异常。

0 个答案:

没有答案