¿Por actualiza la clave principal para nula antes de eliminar el niño?

9 views
Skip to first unread message

Alexandre Lindolfo Vianna

unread,
Mar 11, 2016, 8:59:33 AM3/11/16
to NHibernate-Hispano
¡Hola amigos!

Tengo el siguiente modelo ...

public class SLPiece : BaseEntityEditable
{
  public virtual ICollection<SLPieceOrder> SLPieceOrders { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PCT.Domain" namespace="Gerdau.PCT.Domain" >
  
  <class name="SLPiece" table="P_SL_Piece" lazy="false" dynamic-update="true">
    
    <id name="Id" column="Id_SL_Piece" type="Int64">
      <generator class="Geraes.Library.Core.Domain.CustomTableHiLoGenerator, Library.Core.Domain" />
    </id>
    <set name="SLPieceOrders" generic="true" lazy="true" cascade="all-delete-orphan" fetch="select" inverse="true">
      <key column="Id_SL_Piece" />
      <one-to-many class="SLPieceOrder"/>
    </set>
  </class>
  
</hibernate-mapping>

public class SLPieceOrder : BaseEntity
{
  public virtual SLPiece SLPiece { get; set; }
  public virtual SLPieceProduct SLPieceProduct { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PCT.Domain" namespace="Gerdau.PCT.Domain" >
  
  <class name="SLPieceOrder" table="P_SL_Piece_Order" lazy="false" dynamic-update="true">
    
    <id name="Id" column="Id_SL_Piece_Order" type="Int64">
      <generator class="Geraes.Library.Core.Domain.CustomTableHiLoGenerator, Library.Core.Domain" />
    </id>

    <many-to-one name="SLPiece" column="Id_SL_Piece" class="SLPiece" cascade="none" fetch="join" not-null="true"/>

    <many-to-one name="SLPieceProduct" class="SLPieceProduct" column="Id_SL_Piece_Product" lazy="proxy" cascade="all-delete-orphan" fetch="select" unique="true"/>
  </class>
  
</hibernate-mapping>

public class SLPieceProduct : BaseEntityEditable
{
  public virtual String CustomerName { get; set; }
}
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PCT.Domain" namespace="Gerdau.PCT.Domain" >
  
  <class name="SLPieceProduct" table="P_SL_Piece_Product" lazy="false" dynamic-update="true">
    
    <id name="Id" column="Id_SL_Piece_Product" type="Int64">
      <generator class="Geraes.Library.Core.Domain.CustomTableHiLoGenerator, Library.Core.Domain" />
    </id>

    <property name="CustomerName" column="Customer_Name" type="String" not-null="false" />

  </class>
  
</hibernate-mapping>

a continuación, elimino la lista con el comando ...

  slPiece.SLPieceOrders.Clear();

Cuando trato de guardar el objeto slPiece se genera un error de Oracle ...

  command 0:
    UPDATE
        P_SL_Piece_Order 
    SET
        Id_SL_Piece_Product = :p0 
    WHERE
        Id_SL_Piece_Order = :p1;
    :p0 = NULL [Type: Int64 (0)], :p1 = 12424 [Type: Int64 (0)]
command 1:
    UPDATE
        P_SL_Piece_Order 
    SET
        Id_SL_Piece_Product = :p0 
    WHERE
        Id_SL_Piece_Order = :p1;
    :p0 = NULL [Type: Int64 (0)], :p1 = 12426 [Type: Int64 (0)]

11 10:37:55.362 DEBUG [SQL] Batch commands:
command 0:
    DELETE 
    FROM
        P_SL_Piece_Order 
    WHERE
        Id_SL_Piece_Order = :p0;
    :p0 = 12423 [Type: Int64 (0)]

11 10:37:55.442 DEBUG [SQL] Batch commands:
command 0:
    DELETE 
    FROM
        P_SL_Piece_Product 
    WHERE
        Id_SL_Piece_Product = :p0;
    :p0 = 12322 [Type: Int64 (0)]

11 10:37:55.515 DEBUG [SQL] Batch commands:
command 0:
    DELETE 
    FROM
        P_SL_Piece_Order 
    WHERE
        Id_SL_Piece_Order = :p0;
    :p0 = 12424 [Type: Int64 (0)]
command 1:
    DELETE 
    FROM
        P_SL_Piece_Order 
    WHERE
        Id_SL_Piece_Order = :p0;
    :p0 = 12425 [Type: Int64 (0)]

11 10:37:55.596 DEBUG [SQL] Batch commands:
command 0:
    DELETE 
    FROM
        P_SL_Piece_Product 
    WHERE
        Id_SL_Piece_Product = :p0;
    :p0 = 12323 [Type: Int64 (0)]

11 10:37:55.673 DEBUG [SQL] Batch commands:
command 0:
    DELETE 
    FROM
        P_SL_Piece_Order 
    WHERE
        Id_SL_Piece_Order = :p0;
    :p0 = 12426 [Type: Int64 (0)]
 
ERROR [ADOExceptionReporter] ORA-24381: error(s) in array DML

ORA-01407: cannot update ("PCT_PRD"."P_SL_PIECE_ORDER"."ID_SL_PIECE_PRODUCT") to NULL

el cambio de la columna ID_SL_PIECE_PRODUCT en Oracle database a nullable resuelve el problema, pero no creo que sea bueno para el modelo de datos.

¿Cómo puedo resolver esta situación? 

¡Muchas gracias!
Reply all
Reply to author
Forward
0 new messages