no pongas cascade="delete" en el many-to-one, y para eliminar un child
utiliza:

parent.RemoveChild(child);

ya que vos configuraste cascade="all-delete-orphan"

RemoveChild (debería removerlo de la collection y ponerle el .Parent = null
<-- el del many to one).

También podes hacer lo mismo al inversa, que al hacer "child.Parent = null"
te haga dentro del set un parent.Childs.Remove(this),, pero....

El 4 de enero de 2011 10:07, Google Cris <[email protected]
> escribió:

> Buenos Dias:
>
> Por favor alguien que me ayude a este problema.
>
> Tengo un problema al eliminar los datos de una tabla hijo relacionada
> con la tabla padre, si borro los elementos de la tabla hijo, me están
> borrando también los elementos de la tabla padre. El esquema es el
> siguiente:
>
> La Tabla Hijo:
>
> <?xml version="1.0" encoding="utf-8" ?>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> namespace="PDVSA.Negocio.Entidades.Comunes"
> assembly="Entidades.Comunes"
> default-lazy="true">
> <class name="PDVSA.Negocio.Entidades.Comunes.rEsquemaStandoff"
> table="T_rEsquemaStandoff">
> <meta
> attribute="extends">PDVSA.Business.Entities.Core.AbstractEntity</
> meta>
> <meta attribute="addtional-soucecode">
>    </meta>
>    <id name="ID" column="PK_CodigoEsquemaStandoff" type="String"
> length="32" unsaved-value="0">
>      <meta attribute="field-browsable">false</meta>
>      <meta attribute="field-readonly">true</meta>
>      <meta attribute="field-category">GeneralCategory</meta>
>      <meta attribute="field-propertysort">1</meta>
>      <generator class="uuid.hex"/>
>    </id>
>
>    <many-to-one name="FK_CodigoEscenario"
> class="PDVSA.Negocio.Entidades.Proyecto.pEscenario,
> Entidades.Proyecto" foreign-key="FK_CodigoEscenario"
> column="FK_CodigoEscenario" cascade="delete">
>    </many-to-one>
>
>    <property name="ProfundidadStandoff" column="ProfundidadStandoff"
> type="double">
>    </property>
>
>    <property name="Standoff" column="Standoff" type="double">
>    </property>
>
> </class>
>
> </hibernate-mapping>
>
> La Tabla Padre:
>
> <?xml version="1.0" encoding="utf-8" ?>
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>        namespace="PDVSA.Negocio.Entidades.Proyecto"
>        assembly="Entidades.Proyecto"
>        default-lazy="true">
>        <class name="PDVSA.Negocio.Entidades.Proyecto.pEscenario,
> Entidades.Proyecto" table="T_pEscenario">
>                <meta
> attribute="extends">PDVSA.Business.Entities.Core.AbstractEntity</meta>
>                <meta attribute="default-property-tostring">ID</meta>
>    <meta attribute="field-browsable">false</meta>
>    <meta attribute="field-readonly">true</meta>
>    <id name="ID" column="FK_CodigoEscenario" type="String"
> length="32" unsaved-value="0">
>      <generator class="foreign">
>        <param name="property">FK_CodigoEscenario</param>
>      </generator>
>    </id>
>
>                <one-to-one name="FK_CodigoEscenario"
> class="PDVSA.Negocio.Entidades.Proyecto.dProyectoEscenario,
> Entidades.Proyecto" foreign-key="PK_CodigoProyectoEscenario">
>                </one-to-one>
>
>    <set name="EsquemaStandoff" table="T_rEsquemaStandoff"
> cascade="all-delete-orphan">
>      <key column="FK_CodigoEscenario"/>
>      <one-to-many
> class="PDVSA.Negocio.Entidades.Comunes.rEsquemaStandoff,
> Entidades.Comunes"/>
>    </set>
>
>    <property name="DescripcionEscenario"
> column="DescripcionEscenario" type="String" length="1024">
>    </property>
>
>  </class>
>
> </hibernate-mapping>
>
> a. En este caso, (como muestro mis entidades arriba) si elimino el
> hijo (EsquemaStandoff) me esta borrando también el padre (Escenario) y
> no quiero que esto pase.
>
> b. Probe quitando el cascade="delete" del many-to-one de la tabla hijo
> (EsquemaStandoff) y entonces al momento de eliminar el padre y existir
> un hijo me esta dando el problema de que no puede eliminar el padre
> porque existe un hijo.
>
> {NHibernate.Exceptions.GenericADOException: could not delete:
>
> [PDVSA.Negocio.Entidades.Proyecto.pEscenario#33dc6e7f191f462a882c889071ac64eb]
> [SQL: DELETE FROM public.T_pEscenario WHERE FK_CodigoEscenario = ?]
> Npgsql.NpgsqlException: update or delete on table "t_pescenario"
> violates foreign key constraint "fk_codigoescenario" on table
> "t_resquemastandoff"
>
> Ya he probado de todas las formas y no se como borrar de la forma en
> que deseo:
> Desearía que al borrar el Escenario me borre todos sus EsquemaStandoff
> asociados y que si borro un EsquemaStandoff no me borre el Escenario.
>
> Si alguien me puede ayudar con este problema se lo agradezco, que me
> indique si estoy haciendo las cosas mal.
>
> O será que a juro yo tengo que hacer la implementación para que
> hibernate borre los hijos antes que los padres?
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a