我在通过 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>
我正在尝试通过 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>