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