Hibernate Session Flush
Hacer flush
de la sesión forza a que hibernate sincronice el estado en memoria de la sesión con la base de datos (es decir escribir los cambios a la base de datos). Por defecto, hibernate hará flush
de la sesión automáticamente por usted cuando:
Hacer un flush
explicito de la sesión le da más control sobre cosas que puede requerir en algunas circunstancias (obtener un id asignado, controlar el tamaño de la sesión,...)
Cuando se hace flush
NO se está haciendo commit
de la transacción, los datos no serán commited/rollback hasta que la transacción lo haga explicitamente.
Sirve para indicar al orm en qué momentos debe hacer flush a la sesión.
ALWAYS: La sesión es vaciada (flush) antes de cualquier query.
AUTO (default): La sesión es vaciada (flush) cuando se hace commit de una transacción de hibernate Transaction.commit()
, antes de algunos queries para asegurar que los queries nunca regresen datos antiguos, y cuando se invoca session.flush()
.
COMMIT: La sesión es vaciada (flush) cuando se hace commit de las transacciones Transaction.commit()
.
MANUAL: La sesión es vaciada (flush) solo cuando se invoca manualmente el método Session.flush()
.
NEVER: Deprecated, utilice MANUAL.
No se aconseja mucho utilizar persona.save(flush:true)
porque no le estas permitiendo a hibernate hacer su trabajo (optimizar los saves). Utiliza flush:true
solo donde sea necesario, por ejemplo después de un procesamiento por lotes.
En los controladores flush es = MANUAL, dentro de las transacciones Flush=AUTO