Me preguntaba si alguien podría decirme qué es una sesión sucia de hibernación. Parece que tengo un problema donde una consulta de criterios realiza una inserción cuando no debería. Creo que está relacionado con una sesión sucia, pero sin saber realmente qué tan sucia es la sesión, no puedo resolver mi problema. Además, ¿cómo se crea una sesión sucia? Gracias.¿Qué es una sesión sucia de Hibernate?
Respuesta
La sesión de Hibernate es una memoria caché. Almacena entidades leídas de la base de datos en caché y también almacena en caché los cambios que ha realizado en las entidades que contiene, así como entidades añadidas y eliminadas, hasta que la sesión se vacíe (es decir, todos los cambios pendientes se escriben en la base de datos).
Se dice una sesión sucio cuando aún no se han eliminado algunos cambios. Y, por lo tanto, es perfectamente normal tener una sesión sucia. La sesión se vacía antes de confirmar la transacción.
Simplemente significa que ha realizado cambios en objetos persistentes en memoria, administrados, que aún no han sido descargados a la base de datos.
Básicamente, la idea detrás de hibernar es que el estado de los objetos persistentes en memoria es el estado de la aplicación. Si realiza un cambio en un objeto gestionado, hibernate lo colocará en la base de datos en la próxima oportunidad. No debe realizar cambios "temporales" en los objetos administrados que no pretende que sean persistentes, porque lo serán.
Antes de ejecutar una consulta, hibernate vacía el estado en memoria de todos los objetos administrados en la base de datos, de modo que la consulta sea precisa en relación con el estado de su aplicación.
En realidad, es más complicado que eso: Hibernate se vacía solo si los cambios pendientes podrían tener un impacto en la consulta ejecutada. –
¿Hay alguna manera recomendada de evitar que la consulta realice una inserción antes de decirle que inserte el objeto? Utilicé setFetchMode en el manual que funcionó, sin embargo, creo que esto podría ser solo una corrección de banda en lugar de una corrección de raíz. –
El FlushMode se puede cambiar para toda la aplicación en SessionFactory, probablemente para COMMIT, no MANUAL, si no desea que se realicen inserciones y actualizaciones antes del final de la transacción. Sin embargo, esa es la solución, si está realizando cambios en las entidades administradas que no desea que se escriban en la base de datos, no solo una bandaida. – Affe
Una sesión sucia en Hibernate es cuando carga un objeto dentro de la sesión y luego lo modifica.
O, cuando abre una sesión y crea un objeto nuevo.
Incluso si usted no llama explicitily cualquier operación de inserción/actualización, Hibernate marca la sesión como sucia y guarda los cambios cuando se cierra la sesión
En palabras simples: como sabemos Dirty data es el que aún no se ha confirmado. Del mismo modo, la sesión sucia en hibernación contiene datos modificados que aún no se han confirmado.
- 1. Cuando Hibernate vacía una sesión, ¿cómo decide qué objetos de la sesión están sucios?
- 2. Hibernate: ¿Comprobación sucia y solo actualización de atributos sucios?
- 3. ¿Cómo romper una sesión de Hibernate?
- 4. ¿Qué es una sesión de base de datos?
- 5. WPF MVVM: cómo detectar si una vista es "sucia"
- 6. ¿Qué es una sesión en Java?
- 7. rápida y sucia operador =
- 8. ¿Por qué es lento Hibernate query.list()?
- 9. Fábricas de sesión múltiple en Spring/Hibernate
- 10. Hibernate, Java: no hay ninguna sesión o sesión se cerró
- 11. ¿Qué es la sesión de NHibernate exactamente?
- 12. ¿Puedes averiguar si una instancia de Django Model está "sucia"?
- 13. ¿Qué almacenar en una sesión?
- 14. ¿Es Hibernate una exageración para una aplicación de Android?
- 15. ¿Dropbox es una solución válida de control de fuente rápida y sucia?
- 16. Sobrecarga de sesión: ¿qué es "demasiados datos" almacenados en una sesión en PHP?
- 17. ¿Qué tan grande es la sesión Meteor
- 18. ¿Puedo decir si una propiedad está sucia usando nhibernate?
- 19. ¿Qué sucede si no revierte una transacción en Hibernate?
- 20. Ciclo de vida de sesión de Spring + Hibernate
- 21. Hibernate unidireccional de una a muchas asociaciones: ¿por qué es mejor una tabla de unión?
- 22. Uso de la sesión de Hibernate con cuarzo
- 23. sqlite e hibernate - es una buena idea?
- 24. Qué poner en una variable de sesión
- 25. ¿Por qué esta conexión Hibernate MySQL es de solo lectura?
- 26. ¿Cómo obtener la sesión de Hibernate dentro de un Interceptor Hibernate?
- 27. Acceso a la sesión de Hibernate desde EJB usando EntityManager
- 28. Hibernate ThreadLocal ¿Administración de sesión compatible con ForkJoinPool?
- 29. Spring + Hibernate con anotaciones: Ninguna sesión de Hibernate vinculada al thread
- 30. Hibernate HQL solo golpea el caché de la sesión
si no quiero que la consulta desencadene una descarga, si establezco la consulta de criterios setFlushMode en manual, o lo consideraría una ayuda de banda ¿fijar? –
@George si no desea guardar los cambios realizados en los objetos, intente hacer esos cambios fuera de la sesión – richarbernal
Supongo que tendré que buscar información adicional sobre cómo almacenar mis datos fuera de la sesión. Todavía soy bastante nuevo para hibernar, por lo que no estoy del todo seguro de cómo comenzó la sesión. –