Uno de los mayores problemas de usar Composite Id es que las partes de la composite tienden a tener significado en el dominio. Y uno de los mayores problemas de usar claves que tengan significado en el dominio, es que son susceptible a cambios.
No hace falta que me digas que no podes cambiar el schema, en algún momento de nuestras vidas todos sufrimos eso, así que te entiendo. Podes buscar otros workarrounds. El 4 de agosto de 2010 11:44, Erika Fernández <[email protected]>escribió: > Efectivamente Jose, probe modificar un atributo que no sea parte del > composite-id y hace correctamente el update. > Muchas gracias > > On 4 ago, 11:37, Erika Fernández <[email protected]> wrote: > > si, una de las partes de la Id es un objeto tipo_Familiar y si, lo > > modifico. > > Vos decis que por eso me inserta un nuevo registro? > > > > On 4 ago, 11:29, José F. Romaniello <[email protected]> wrote: > > > > > > > > > Al modificar un "Disc_Grupo_Fliar_Conviviente" estas modificando parte > de su > > > Id? > > > > > Saludos > > > > > El 4 de agosto de 2010 11:23, Erika Fernández <[email protected] > >escribió: > > > > > > Por las dudas aclaro, porque nos ve claramente el los SQL que la > tabla > > > > DISC_GRUPO_FLIAR_CONVIVIENTE tiene una composite-id > > > > > > On 4 ago, 08:48, Erika Fernández <[email protected]> wrote: > > > > > 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 > > > > ... > > > > leer más »- Ocultar texto de la cita - > > > > - Mostrar texto de la cita - > > -- > 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
