Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/12/2013, 04:52
Avatar de Fuzzylog
Fuzzylog
 
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 9 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