我在通过 nhibernate 将对象提交到数据库时遇到异常

I'm getting exceptions committing objects to the database via nhibernate

我正在尝试通过 nHibernate 将父对象及其子对象保存到 SQL 服务器数据库。 这2个对象在DB中的结构如下: 父(应用程序)table 的主键是 'Id',它是子(application_certificate)table 的外键,也称为 'Id' . 此外,子项 table 将列 'Id' 作为复合主键以及另一列。 如果我创建并保存一个应用程序,我不会有任何例外。但是,如果我尝试将证书与其相关联,则会出现以下异常:

Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [Order.ApplicationCertificate#Order.ApplicationCertificate]

hbm.xml个文件(仅包含相关部分)如下:

申请。hbm.xml

<?xml version="1.0" encoding="utf-8"?>
    <hibernate-mapping assembly="sApp" namespace="Order" xmlns="urn:nhibernate-mapping-2.2">
      <class name="Application" table="application" lazy="false" dynamic-insert="true" >
        <id name="Id" column="id" />
        <bag name="ApplicationCertificates" inverse="false" cascade="all-delete-orphan" lazy="true">
          <key column="id" />
          <one-to-many class="ApplicationCertificate" />
        </bag>
      </class>
    </hibernate-mapping>

application_certificate.hbm.xml:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="sApp" namespace="Order" xmlns="urn:nhibernate-mapping-2.2">
  <class name="ApplicationCertificate" table="application_certificate" lazy="false" dynamic-insert="true" optimistic-lock="version" dynamic-update="true">
    <!--optimistic-lock="version"-->

    <composite-id>
      <key-property name="Id" column="id" />
      <key-property name="CertificateNumber" column="certificate_number" />
    </composite-id>

    <!-- must be first element after id-->
    <version column="version" name="Version" />

    <many-to-one name="Application">
      <column name="id" sql-type="int" not-null="true" />
    </many-to-one>
  </class>
</hibernate-mapping>

所以这个改变似乎让它起作用了:

<composite-id>
      <key-many-to-one name="Application" class="Application" column="id" />
      <key-property name="CertificateNumber" column="certificate_number" />
    </composite-id>

    <!-- must be first element after id-->
    <version column="version" name="Version" />

    <property name="Id" update="false" insert="false" >
      <column name="id" sql-type="int" not-null="true" />
    </property>