ORA 01407 - 错误 - 无法更新为 NULL

ORA 01407 - Error - Cannot update to NULL

我的问题是我有两个具有一对一关系的实体(文档和附件)。在我的应用程序中,我可以先保存文档,如果我想的话,我可以将存档附加到它,它将在 table 附件上。

当我有一个对象文档已插入数据库然后我尝试在其上添加附件时发生错误。

下面是 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>

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

如果我同时插入 Document 和 Attach,就可以了。但是当我创建了一个文档并尝试插入一个附件时,出现了以下错误:

ORA-01407: 无法将 ("GRSDS"."ESPEC_DOCUMENTO_FCDR"."DOCF_SQ_DOCUMENTO_FCDR") 更新为 NULL

我尝试了什么:

1 - 保存要插入的附件:

bmDocument.Save(文档);

好的,我解决了这个问题。

当我从数据库中获取对象 Document 时,当属性 Attach 没有 Attach 时,作为一个空列表出现:{}

当我尝试向该文档添加附件时,我覆盖了引用,如下所示:

Document.Attach = new List() { new Attach() };

解决方案是使用从数据库中获取的列表的添加方法:

Document.Attach.Add( new Attach() );