我的问题是我有两个实体(Document和Attach(,它们有一对一的关系。在我的应用程序中,我可以先保存文档,最近如果我愿意,我可以将存档附加到它,该存档将在表attach上。
当我有一个对象文档已经插入数据库,然后我试图在它上添加一个附件时,就会发生错误。
以下是nhibernate映射:
Document.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Sigre.Business"
namespace="Sigre.Business.BusinessEntity">
<class name="Document" lazy="false" table="grsds.documento_fcdr">
<id name="Code" type="int" unsaved-value="0" column="docf_sq_documento_fcdr">
<generator class="sequence">
<param name="sequence">grsds.sq_docf_sq_documento_fcdr</param>
</generator>
</id>
<property name="Nome" type="AnsiString" length="100" not-null="true" column="docf_nm_documento_fcdr" />
<many-to-one name="Manifest" class="TransportManifest" column="mtra_sq_manifesto_transporte" not-null="false" cascade="none" />
<many-to-one name="User" class="User" column="user_id" not-null="false" cascade="none" />
<set name="Attach" inverse="false" lazy="false" cascade="save-update">
<key column="docf_sq_documento_fcdr" />
<one-to-many class="Attach" />
</set>
</class>
</hibernate-mapping>
附件.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Sigre.Business"
namespace="Sigre.Business.BusinessEntity">
<class name="Attach" lazy="false" table="grsds.espec_documento_fcdr">
<id name="Code" type="int" unsaved-value="0" column="docf_sq_documento_fcdr">
<generator class="foreign">
<param name="property">Document</param>
</generator>
</id>
<property name="Archive" column="esdf_mm_documento_fcdr" type="BinaryBlob" not-null="true" />
<one-to-one constrained="true" name="Document" access="property" />
</class>
</hibernate-mapping>
如果我同时插入"文档"one_answers"附件",它会起作用。但是,当我创建了一个文档并尝试插入一个附件时,会出现以下错误:
ORA-01407:无法将("GRSDS"."ESPEC_DOCUMENTO_FCDR"."DOCF_SQ_DOCUMENTO_FCDR"(更新为空
我尝试过的:
1-保存要插入附件的文档:
bmDocument.Save(文档(;
好的,我解决了这个问题。
当我从数据库中取出对象Document时,属性Attach在没有Attach时作为空列表出现:{}
当我试图在这个文档中添加一个附件时,我覆盖了引用,如下所示:
Document.Attach=new List(({new Attach((};
解决方案是使用从数据库中带来的列表的方法Add:
Document.Attach.Add(new Attach(((;