mmmmm me parece que necesitas otra cosa.....
que significa esto ?
"cuando elimino un elemento de la colección, le vuelvo a agregar otro
elemento con la misma unique key"

como están implementado el equality comparer ?
para que metes el not-nullable a true ? a que te sirve ?

2010/7/27 Ezequiel Cozzolino <[email protected]>

> Gracias por sus respuestas:
>
> Probé de poner el inverse="true", pero no funcionó. Probé lo siguiente:
>
> Creo el padre.
>
> Luego
>
> planDeSiembra.add(lineaPlanActividad)
> padreService,guardar(planDeSiembra)
>
> Error: "System.Data.SqlClient.SqlException: Cannot insert the value NULL
> into column 'IdPlanDeSiembra', table 'Intranet.dbo.LineasPlanActividad';
> column does not allow nulls"
>
> Luego como me recomendó Diego Mijelshon hice la relación bidireccional.
> Esto ultimo no me resuelve el problema cuando elimino un elemento de la
> colección, le vuelvo a agregar otro elemento con la misma unique key que el
> eliminado y guardo el padre. Al guardar el padre me da el error:
>
> planDeSiembra.remove(lineaPlanActividad)
> planDeSiembra.add(lineaPlanActividad2) ==> en donde lineaPlanActividad2
> tiene la misma unique-key que lineaPlanActividad
> planDeSiembraService.guardar(planDeSiembra)
>
> Error: "System.Data.SqlClient.SqlException: Violation of UNIQUE KEY
> constraint 'UQ__LineasPlanActivi__3D29E0FF'. Cannot insert duplicate key in
> object 'dbo.LineasPlanActividad'"
>
>
>
> Saludos
> Ezequiel
>
> El 27 de julio de 2010 11:08, Diego Mijelshon 
> <[email protected]>escribió:
>
>  http://nhforge.org/doc/nh/en/index.html#collections-onetomany
>>
>> *Very Important Note:* If the <key> column of a <one-to-many> association
>> is declared NOT NULL, NHibernate may cause constraint violations when it
>> creates or updates the association. To prevent this problem, *you must
>> use a bidirectional association* with the many valued end (the set or
>> bag) marked asinverse="true". See the discussion of bidirectional
>> associations later in this chapter.
>>
>>     Diego
>>
>>
>> 2010/7/27 José F. Romaniello <[email protected]>
>>
>> proba así:
>>>   <bag name="Actividades" table="LineasPlanActividad"
>>> cascade="all-delete-orphan" *inverse="true"*>
>>>
>>>
>>> El 27 de julio de 2010 10:35, Ezequiel Cozzolino <
>>> [email protected]> escribió:
>>>
>>>  Hola a todos:
>>>>
>>>> Soy nuevo en NHibernate y me surgieron dos inconvenientes que paso a
>>>> comentarles:
>>>>
>>>> Tengo una relación del tipo BAG entre las clases PlanDeSiembra y
>>>> LineaPlanActividad. Muestro el segmento del archivo de mapeo de la clase
>>>> PlanDeSiembra en donde hago la relación one-to-many con la clase
>>>> LineaPlanActividad :
>>>>
>>>> <PlanDeSiembra.hbm.xml>
>>>>
>>>>   <bag name="Actividades" table="LineasPlanActividad"
>>>> cascade="all-delete-orphan">
>>>>       <key>
>>>>         <column name="IdPlanDeSiembra" not-null="true"
>>>> unique-key="PlanActividad" />
>>>>       </key>
>>>>       <one-to-many class="LineaPlanActividad"/>
>>>>   </bag>
>>>>
>>>> Este mapeo me crea la columna IdPlanDeSiembra en la tabla
>>>> LineaPlanActividad, lo cual es correcto.
>>>>
>>>> Primer inconveniente:
>>>>
>>>> Como la columna IdPlanDeSiembra no admite nulos da un error al intentar
>>>> guardar una colección. En el log veo que NHibernate primero inserta los
>>>> registros en la tabla LineasPlanActivdad con el campo IdPlanDeSiembra en
>>>> nulo, y luego hace un update para guardar el valor de la columna
>>>> IdPlanDeSiembra.
>>>>
>>>>
>>>> Segundo inconveniente:
>>>>
>>>> Para probar saque el not-null="true" del archivo de mapeo de la clase
>>>> PlanDeSiembra. Con esto puedo guardar la colección sin problemas. Comprobé
>>>> que efectivamente NHibernate primero hace un insert con los hijos y luego
>>>> hace un update de la columna que estabalece la relación de los hijos con el
>>>> padre.
>>>>
>>>> Hasta ahí el problema "estaría" solucionado, aunque no me convencía
>>>> permitir valores nulos en la columna IdPlanDeSiembra en la tabla
>>>> LineasPlanActividad.
>>>>
>>>> Hice otra prueba y fue ahí cuando me encontré con otro problema al
>>>> realizar la siguiente secuencia de acciones:
>>>>
>>>> - Elimino un elemento de la colección ==> planDeSiembra.remove(linea)
>>>> - Agrego un elemento a la colección con la misma unique-key que el
>>>> elemento anterior que fue eliminado ==> planesDeSiembra.add(linea)
>>>> - Guardo ==> planDeSiembraService.guardar(planDeSiembra)
>>>>
>>>> Me da un error ya que aparentemente NHibernate primero hace los insert y
>>>> despues los delete, con lo cual al intentar guardar el elemento de la
>>>> colección da un error por unique-key con el elemento que todavía no fue
>>>> eliminado.
>>>>
>>>>
>>>> Evidentemente algo estoy haciendo mal. Les voy a agradecer si me
>>>> orientan un poco en como resolver este problema.
>>>> Intente ser lo mas claro posible, si hace falta puedo enviar las clases
>>>> y los archivos de mapeo completos.
>>>>
>>>> Muchas Gracias
>>>> Ezequiel
>>>>
>>>> --
>>>> 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
>>>
>>
>> --
>> 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
>



-- 
Fabio Maulo

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