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
