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

Responder a