Foros del Web » Programación para mayores de 30 ;) » Java »

Update no deseado al Insertar un registro con hibernate

Estas en el tema de Update no deseado al Insertar un registro con hibernate en el foro de Java en Foros del Web. Hola Ahora mismo me encuentro peleando con el siguiente problema y no veo por donde tirar: Estoy probando una aplicación que inserta registros en una ...
  #1 (permalink)  
Antiguo 12/12/2013, 04:52
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Update no deseado al Insertar un registro con hibernate

Hola

Ahora mismo me encuentro peleando con el siguiente problema y no veo por donde tirar:

Estoy probando una aplicación que inserta registros en una tabla A en una base de datos, y puede ejecutarse sobre dos bases de datos diferentes con dos usuarios distintos.

En la base de datos 1 con el usuario 1, cada vez que inserto un registro en la tabla A me intenta actualizar otro registro en una tabla B en la que no tengo permisos.
Sin embargo, en la base de datos 2 con el usuario 2, no intenta nunca hacer un update de la tabla B cuando se inserta un registro en la tabla A. Sólo inserta el registro A, sin más.

El mapeo de A incluye a B como un <many-to-one>.

Valoraciones:

Aparentemente el problema más típico con hibernate sería la persistencia, es decir, que cuando se incluye la entidad B en A, se modifique algún dato de B e hibernate para mantener la integridad actualice B. Pero eso en el código no pasa. Sólo se carga la entidad B y se incluye en A antes de realizar el insert de A.

Otra posibilidad es que exista alguna llamada explícita al update/saveOrUpdate u otros métodos que actualicen la tabla B. En todo el código eso no ocurre.

No descarto que pueda existir un trigger en la base de datos 1 que provoque un update de la tabla B cuando se inserte en A, pero he probado a insertar manualmente un registro en A con los permisos del usuario 1 y me lo ha permitido, por lo que tampoco parece probable.

¿Alguna idea?

Notas:

- No puedo poner el mapeo de B como read-only porque está con una foreing key y con hibernate me salta una ConstraintViolationException ya que ese campo no puede ir nulo.

- He utilizado una query para listar los posibles triggers y no hay ninguno para los esquemas correspondientes a las dos tablas.

- El error se me produce al hacer un flush() de la sesión tras insertar el registro de la tabla A, con este mensaje:
[12 dic 14:01:15,394] WARN JDBCExceptionReporter - SQL Error: -551, SQLState: 42501 (Permisos insuficientes)
[12 dic 14:01:15,394] ERROR JDBCExceptionReporter - DB2 SQL error: SQLCODE: -551, SQLSTATE: 42501, SQLERRMC: UCOMSGSD;UPDATE;ESQUEMA.TABLA
[12 dic 14:01:15,394] ERROR AbstractFlushingEventListener - Could not synchronize database state with session
(El problema no es que no tenga permisos, es que no debería hacer el update)
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Última edición por Fuzzylog; 12/12/2013 a las 07:08
  #2 (permalink)  
Antiguo 12/12/2013, 12:38
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Update no deseado al Insertar un registro con hibernate

Cita:
[12 dic 14:01:15,394] ERROR JDBCExceptionReporter - DB2 SQL error: SQLCODE: -551, SQLSTATE: 42501, SQLERRMC: UCOMSGSD;UPDATE;ESQUEMA.TABLA
Siento no poder ayudarte, pero me solidarizo contigo, yo también estoy sufriendo las peculiaridades de DB2 XD

Yo apostaría por los trigger, misma actualización con mismo código en dos bases de datos iguales deberían ser iguales. ¿Has probado a ver el log de Hibernate a nivel debug? Si ves dos llamadas a las tablas el problema está en el código, si ves una es que hay un trigger.

Por cierto, ¿qué cliente estás utilizando para trastear en la base de datos? Yo el System Navigator y es infumable.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 12/12/2013, 14:08
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Update no deseado al Insertar un registro con hibernate

Usa squirrel, te arreglará la vida.

Y no, definitivamente no es un trigger. Es hibernate tocando las narices.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #4 (permalink)  
Antiguo 13/12/2013, 01:44
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Update no deseado al Insertar un registro con hibernate

Un problema parecido me ocurrió a mi en un proyecto de prueba con Spring+Hibernate y no encontré solución para ello.

En mi caso era en una relación Muchas a Muchos.. donde se debían insertar los datos en la tabla intermedia.

Sin embargo todavia nose porque Hibernate me insertaba un registro en dicha tabla, y al insertar el siguiente me hacia un DELETE del registro anterior, permitiendome tener únicamente un registro en dicha tabla intermedia
  #5 (permalink)  
Antiguo 13/12/2013, 01:58
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Update no deseado al Insertar un registro con hibernate

Con esto me intenta hacer un update de A cuando inserto B:

EntityB objB = new EntityB();
List<EntityA] listA = dao.findByName(aName);
if (listA != null && !listA.isEmpty()) {
objB.setObjA(dao.findById(listA.get(0).getId()));
}

Y con esto no:

objB.setObjA(dao.findById(anId));

Lo dicho, no entiendo nada, pero al menos puedo evitar el problema.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #6 (permalink)  
Antiguo 13/12/2013, 02:02
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Update no deseado al Insertar un registro con hibernate

Cita:
Iniciado por Fuzzylog Ver Mensaje
Con esto me intenta hacer un update de A cuando inserto B:

EntityB objB = new EntityB();
List<EntityA] listA = dao.findByName(aName);
if (listA != null && !listA.isEmpty()) {
objB.setObjA(dao.findById(listA.get(0).getId()));
}

Y con esto no:

objB.setObjA(dao.findById(anId));

Lo dicho, no entiendo nada, pero al menos puedo evitar el problema.
Pero si es lo mismo no?
  #7 (permalink)  
Antiguo 13/12/2013, 08:40
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Update no deseado al Insertar un registro con hibernate

Cita:
Iniciado por rgf1987 Ver Mensaje
Pero si es lo mismo no?
... Exactamente!
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: deseado, hibernate, registro, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:16.