我通过nhibernate获得了将对象提交到数据库的异常

时间:2015-07-27 07:50:03

标签: c# sql-server nhibernate

我试图通过nHibernate将父对象及其子节点保存到SQL Server数据库。   这两个对象的DB中的结构如下: 父(应用程序)表的主键是' Id'这是子(application_certificate)表的外键,它也被称为“id'”。 此外,子表格中包含“' Id'作为复合主键以及另一列。   如果我创建并保存应用程序,我没有例外。但是,如果我尝试将证书与其关联,则会出现以下异常:

  

行被另一个事务更新或删除(或未保存的值映射不正确):[Order.ApplicationCertificate#Order.ApplicationCertificate]

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

Application.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>

1 个答案:

答案 0 :(得分:0)

所以这个改变似乎使它有效:

<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>