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)