Buenos dias a todos. Voy a tratar de plantearles el problema lo más
simple posible.
Tengo una clase Disc_Registro_Perfil_Laboral con, entre otras cosas un
List<Disc_Grupo_Fliar_Conviviente>(donde se guardan los familiares de
una persona, el tipo de familiar y la cantidad de los mismos).
Al hacer SaveOrUpdate(registro), donde en realidad estoy tratando de
modificar un objeto que recupere previamente de la base de datos, hace
el update correctamente del objeto Registo, pero no asi los objetos
Familiares de la lista.
Estos son los errores:
1. Al intentar modificar un familiar, previamente cargado en la base,
en vez de modificarlo, inserta un nuevo familiar. Este es el SQL que
genera:

NHibernate: INSERT INTO SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE
(CANTIDAD, USUARIO_ALTA, FECHA_ALTA, USUARIO_MODIF, FECHA_MODIF,
ID_REGISTRO, ID_TIPO_FAMILIAR) VALUES
(:p0, :p1, :p2, :p3, :p4, :p5, :p6);:p0 = 1, :p1 = 'SOLIDARIDAD', :p2
= 04/08/2010 08:35:35 a.m., :p3 = NULL, :p4 = NULL, :p5 = 63, :p6 = 3

NHibernate: UPDATE SOLIDARIDAD.T_DISC_REGISTRO_PERFIL_LABORAL SET
ID_TIPO_DOCUMENTO = :p0, ID_SEXO = :p1, NRO_DOCUMENTO = :p2,
ID_TIPO_CAUSA_DISC = :p3, CAPACITACION = :p4, EMPLEO = :p5, PENSION
= :p6, INGRESO_POR_TRAMITE = :p7, OTRA_REF_DOMICILIO = :p8,
EDAD_COMIENZO_DISC = :p9, MOVILIDAD_CON_IND = :p10, RESOLUCION_PROB
= :p11, MANEJO_ADM_DINERO = :p12, MANEJO_PC = :p13, MANEJO_INTERNET
= :p14, MANEJO_OFFICE = :p15, CONOC_USO_TIPOS_TRANSP = :p16,
COMUNICACION = :p17, POSIBILIDAD_ELECCION = :p18,
EXPECTATIVAS_LABORALES = :p19, TIEMPO_LIBRE = :p20,
EXPECT_TAREAS_DESEMPENIAR = :p21, OBSERVACIONES_FICHA = :p22,
CURSOS_ADEC_ACCESO = :p23, CURSOS_CAPACITADO_PARA = :p24,
TRABAJOS_ADEC_ACCESO = :p25, TRABAJOS_OBSERVAC = :p26, ID_TIPO_JORNADA
= :p27, RELAC_INTERPERSONAL = :p28, FECHA_ENTREVISTA = :p29,
ID_ENTREVISTADOR = :p30, ID_TIPO_ENTREVISTA = :p31, USUARIO_ALTA
= :p32, FECHA_ALTA = :p33, USUARIO_MODIF = :p34, FECHA_MODIF = :p35,
ID_TURNO_JORNADA = :p36, DIAGNOSTICO = :p37, MEDICAMENTO = :p38,
CERTIFICADO_DISC = :p39 WHERE ID_REGISTRO = :p40;:p0 = 1, :p1 =
'F', :p2 = 31548444, :p3 = 2, :p4 = 'S', :p5 = 'S', :p6 = 'S', :p7 =
'INGRESI', :p8 = 'OTRAS', :p9 = 10, :p10 = 'S', :p11 = 'REGULAR', :p12
= 'BUENO', :p13 = 'MUY BUENO', :p14 = 'MUY BUENO', :p15 = 'MUY
BUENO', :p16 = 'S', :p17 = 'BUENO', :p18 = 'REGULAR', :p19 = 'EXPEC
LABORALES', :p20 = 'TIEMPO LIBRE', :p21 = 'EXPECTATIVAS', :p22 =
'NUEVAS OBSERVACIONES MODIFICADAS', :p23 = 'OBSER', :p24 =
'ACTIVIDAD', :p25 = 'CUALES MODIFICADO', :p26 = 'OBSERVACIONES', :p27
= 1, :p28 = 'RELACION INTERPERSONAL', :p29 = 27/07/2010 12:00:00
a.m., :p30 = 1, :p31 = 3, :p32 = 'SOLIDARIDAD', :p33 = 27/07/2010
10:06:01 a.m., :p34 = 'SOLIDARIDAD', :p35 = 04/08/2010 08:35:31
a.m., :p36 = 2, :p37 = 'DIAG', :p38 = 'MEDICAMEBNTE', :p39 = 'S', :p40
= 63

NHibernate: UPDATE SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE SET
CANTIDAD = :p0, USUARIO_ALTA = :p1, FECHA_ALTA = :p2, USUARIO_MODIF
= :p3, FECHA_MODIF = :p4 WHERE ID_REGISTRO = :p5 AND ID_TIPO_FAMILIAR
= :p6;:p0 = 1, :p1 = 'SOLIDARIDAD', :p2 = 04/08/2010 08:35:35
a.m., :p3 = NULL, :p4 = NULL, :p5 = 63, :p6 = 2

NHibernate: UPDATE SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE SET
ID_REGISTRO = :p0 WHERE ID_REGISTRO = :p1 AND ID_TIPO_FAMILIAR
= :p2;:p0 = 63, :p1 = 63, :p2 = 3


NHibernate: UPDATE SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE SET
ID_REGISTRO = :p0 WHERE ID_REGISTRO = :p1 AND ID_TIPO_FAMILIAR
= :p2;:p0 = 63, :p1 = 63, :p2 = 2


2. Al intentar borrar un familiar, no lo borra(falta el delete). Este
es el SQL que genera:

NHibernate: UPDATE SOLIDARIDAD.T_DISC_REGISTRO_PERFIL_LABORAL SET
ID_TIPO_DOCUMENTO = :p0, ID_SEXO = :p1, NRO_DOCUMENTO = :p2,
ID_TIPO_CAUSA_DISC = :p3, CAPACITACION = :p4, EMPLEO = :p5, PENSION
= :p6, INGRESO_POR_TRAMITE = :p7, OTRA_REF_DOMICILIO = :p8,
EDAD_COMIENZO_DISC = :p9, MOVILIDAD_CON_IND = :p10, RESOLUCION_PROB
= :p11, MANEJO_ADM_DINERO = :p12, MANEJO_PC = :p13, MANEJO_INTERNET
= :p14, MANEJO_OFFICE = :p15, CONOC_USO_TIPOS_TRANSP = :p16,
COMUNICACION = :p17, POSIBILIDAD_ELECCION = :p18,
EXPECTATIVAS_LABORALES = :p19, TIEMPO_LIBRE = :p20,
EXPECT_TAREAS_DESEMPENIAR = :p21, OBSERVACIONES_FICHA = :p22,
CURSOS_ADEC_ACCESO = :p23, CURSOS_CAPACITADO_PARA = :p24,
TRABAJOS_ADEC_ACCESO = :p25, TRABAJOS_OBSERVAC = :p26, ID_TIPO_JORNADA
= :p27, RELAC_INTERPERSONAL = :p28, FECHA_ENTREVISTA = :p29,
ID_ENTREVISTADOR = :p30, ID_TIPO_ENTREVISTA = :p31, USUARIO_ALTA
= :p32, FECHA_ALTA = :p33, USUARIO_MODIF = :p34, FECHA_MODIF = :p35,
ID_TURNO_JORNADA = :p36, DIAGNOSTICO = :p37, MEDICAMENTO = :p38,
CERTIFICADO_DISC = :p39 WHERE ID_REGISTRO = :p40;:p0 = 1, :p1 =
'F', :p2 = 31548444, :p3 = 2, :p4 = 'S', :p5 = 'S', :p6 = 'S', :p7 =
'INGRESI', :p8 = 'OTRAS', :p9 = 10, :p10 = 'S', :p11 = 'REGULAR', :p12
= 'BUENO', :p13 = 'MUY BUENO', :p14 = 'MUY BUENO', :p15 = 'MUY
BUENO', :p16 = 'S', :p17 = 'BUENO', :p18 = 'REGULAR', :p19 = 'EXPEC
LABORALES', :p20 = 'TIEMPO LIBRE', :p21 = 'EXPECTATIVAS', :p22 =
'NUEVAS OBSERVACIONES MODIFICADAS', :p23 = 'OBSER', :p24 =
'ACTIVIDAD', :p25 = 'CUALES MODIFICADO', :p26 = 'OBSERVACIONES', :p27
= 1, :p28 = 'RELACION INTERPERSONAL', :p29 = 27/07/2010 12:00:00
a.m., :p30 = 1, :p31 = 3, :p32 = 'SOLIDARIDAD', :p33 = 27/07/2010
10:06:01 a.m., :p34 = 'SOLIDARIDAD', :p35 = 04/08/2010 08:43:13
a.m., :p36 = 2, :p37 = 'DIAG', :p38 = 'MEDICAMEBNTE', :p39 = 'S', :p40
= 63

NHibernate: UPDATE SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE SET
CANTIDAD = :p0, USUARIO_ALTA = :p1, FECHA_ALTA = :p2, USUARIO_MODIF
= :p3, FECHA_MODIF = :p4 WHERE ID_REGISTRO = :p5 AND ID_TIPO_FAMILIAR
= :p6;:p0 = 1, :p1 = 'SOLIDARIDAD', :p2 = 04/08/2010 08:43:13
a.m., :p3 = NULL, :p4 = NULL, :p5 = 63, :p6 = 1

NHibernate: UPDATE SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE SET
CANTIDAD = :p0, USUARIO_ALTA = :p1, FECHA_ALTA = :p2, USUARIO_MODIF
= :p3, FECHA_MODIF = :p4 WHERE ID_REGISTRO = :p5 AND ID_TIPO_FAMILIAR
= :p6;:p0 = 1, :p1 = 'SOLIDARIDAD', :p2 = 04/08/2010 08:43:13
a.m., :p3 = NULL, :p4 = NULL, :p5 = 63, :p6 = 2

NHibernate: UPDATE SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE SET
ID_REGISTRO = :p0 WHERE ID_REGISTRO = :p1 AND ID_TIPO_FAMILIAR
= :p2;:p0 = 63, :p1 = 63, :p2 = 1

NHibernate: UPDATE SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE SET
ID_REGISTRO = :p0 WHERE ID_REGISTRO = :p1 AND ID_TIPO_FAMILIAR
= :p2;:p0 = 63, :p1 = 63, :p2 = 2

3. Si quiero borrar todos los familiarea, ahi si funciona. los borra.
SQL generado:
NHibernate: UPDATE SOLIDARIDAD.T_DISC_REGISTRO_PERFIL_LABORAL SET
ID_TIPO_DOCUMENTO = :p0, ID_SEXO = :p1, NRO_DOCUMENTO = :p2,
ID_TIPO_CAUSA_DISC = :p3, CAPACITACION = :p4, EMPLEO = :p5, PENSION
= :p6, INGRESO_POR_TRAMITE = :p7, OTRA_REF_DOMICILIO = :p8,
EDAD_COMIENZO_DISC = :p9, MOVILIDAD_CON_IND = :p10, RESOLUCION_PROB
= :p11, MANEJO_ADM_DINERO = :p12, MANEJO_PC = :p13, MANEJO_INTERNET
= :p14, MANEJO_OFFICE = :p15, CONOC_USO_TIPOS_TRANSP = :p16,
COMUNICACION = :p17, POSIBILIDAD_ELECCION = :p18,
EXPECTATIVAS_LABORALES = :p19, TIEMPO_LIBRE = :p20,
EXPECT_TAREAS_DESEMPENIAR = :p21, OBSERVACIONES_FICHA = :p22,
CURSOS_ADEC_ACCESO = :p23, CURSOS_CAPACITADO_PARA = :p24,
TRABAJOS_ADEC_ACCESO = :p25, TRABAJOS_OBSERVAC = :p26, ID_TIPO_JORNADA
= :p27, RELAC_INTERPERSONAL = :p28, FECHA_ENTREVISTA = :p29,
ID_ENTREVISTADOR = :p30, ID_TIPO_ENTREVISTA = :p31, USUARIO_ALTA
= :p32, FECHA_ALTA = :p33, USUARIO_MODIF = :p34, FECHA_MODIF = :p35,
ID_TURNO_JORNADA = :p36, DIAGNOSTICO = :p37, MEDICAMENTO = :p38,
CERTIFICADO_DISC = :p39 WHERE ID_REGISTRO = :p40;:p0 = 1, :p1 =
'F', :p2 = 31548444, :p3 = 2, :p4 = 'S', :p5 = 'S', :p6 = 'S', :p7 =
'INGRESI', :p8 = 'OTRAS', :p9 = 10, :p10 = 'S', :p11 = 'REGULAR', :p12
= 'BUENO', :p13 = 'MUY BUENO', :p14 = 'MUY BUENO', :p15 = 'MUY
BUENO', :p16 = 'S', :p17 = 'BUENO', :p18 = 'REGULAR', :p19 = 'EXPEC
LABORALES', :p20 = 'TIEMPO LIBRE', :p21 = 'EXPECTATIVAS', :p22 =
'NUEVAS OBSERVACIONES MODIFICADAS', :p23 = 'OBSER', :p24 =
'ACTIVIDAD', :p25 = 'CUALES MODIFICADO', :p26 = 'OBSERVACIONES', :p27
= 1, :p28 = 'RELACION INTERPERSONAL', :p29 = 27/07/2010 12:00:00
a.m., :p30 = 1, :p31 = 3, :p32 = 'SOLIDARIDAD', :p33 = 27/07/2010
10:06:01 a.m., :p34 = 'SOLIDARIDAD', :p35 = 04/08/2010 08:45:03
a.m., :p36 = 2, :p37 = 'DIAG', :p38 = 'MEDICAMEBNTE', :p39 = 'S', :p40
= 63

NHibernate: DELETE FROM SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE
WHERE ID_REGISTRO = :p0 AND ID_TIPO_FAMILIAR = :p1;:p0 = 63, :p1 = 1

NHibernate: DELETE FROM SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE
WHERE ID_REGISTRO = :p0 AND ID_TIPO_FAMILIAR = :p1;:p0 = 63, :p1 = 2

NHibernate: DELETE FROM SOLIDARIDAD.T_DISC_GRUPO_FLIAR_CONVIVIENTE
WHERE ID_REGISTRO = :p0 AND ID_TIPO_FAMILIAR = :p1;:p0 = 63, :p1 = 3

***************Mapeo(solo les copio una parte, ya que es muy
largo):********************
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Discapacidad_Empleo"
                   namespace="Discapacidad_Empleo.Clases">
  <class name="Disc_Registro_Perfil_Laboral"
table="T_DISC_REGISTRO_PERFIL_LABORAL" schema="SOLIDARIDAD">
    <id name="Id_registro" type="int" unsaved-value="0">
      <column name="ID_REGISTRO" sql-type="number"/>
      <generator class="sequence">
        <param name="sequence">SEC_DISC_ID_REGISTRO</param>
      </generator>
    </id>

   (...)

    <bag cascade="all-delete-orphan" lazy="false"
name="GrupoFamiliarConviviente" table="T_DISC_GRUPO_FLIAR_CONVIVIENTE"
>
      <key not-null="true" column="ID_REGISTRO"/>
      <one-to-many class="Disc_Grupo_Fliar_Conviviente"/>
    </bag>
  (....)

***********Metodo de Modificacion****************
public Object updateRegistroPerfilLaboral(Object registro)
        {
            session = HibernateUtil.SessionFactory.OpenSession();
            ITransaction tx = session.BeginTransaction();

            session.SaveOrUpdate(registro);
            session.Flush();
            tx.Commit();

            session.Close();
            return null;
        }

Muchas gracias
Erika






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