Este error ocurre cuando dentro de una transaccion empezamos a hacer modificaciones a un objeto ( que no viene a ser mas que una instancia de un registro de una tabla ) y luego, desde otra transacción modificamos ese mismo registro ( pero "personificado" en otro objeto ). Entonces cuando "commiteamos" el cambio en el objeto de la segunda transaccion, el objeto que representa ese registro en la primera transaccion queda desactualizado, lo que provoca una inconsistencia de los datos, la cual detecta Hibernate y larga esa exception al momento de "commitear la primera transacción".
Lo que se hace en ese caso es, antes de "commitear" la primera transaccion es llamar al método refresh() del EntityManager, lo cual sincroniza el objeto en la primera transaccion con el registro actualizado en la BBDD con la segunda transaccion.
En un intento de ser mas gráfico, la secuencia sería algo así
TRANSACCION 1
Levanto el registro con id=1 de la BBDD y se genera un objeto(1) que lo personifica
Modifico el objeto(1)
TRANSACCION 2
Levanto el registro con id=1 de la BBDD y se genera un objeto(2) que lo
personifica
Modifico el objeto(2)
Commit al objeto(2)
// A esta altura, objeto(1) representa un registro desactualizado de la BBDD
//lo que hacemos es sincronizarlo con la BB
entityManager.refresh()
Commit al objeto(1)
Fijense si les sirve, y si he escrito huevadas, avisen y lo cambio
Buscar:
Búsqueda personalizada
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment