2012-05-09 28 views
21

Entiendo una comprensión general del concepto de una transacción de base de datos. Accedemos a una base de datos dentro de la transacción para garantizar las propiedades de ACID.¿Qué es una sesión de base de datos?

En Hibernate hay un concepto llamado sesión. ¿Para qué sirve una sesión? ¿Cuándo debería tener lugar el acceso a la base de datos en dos sesiones en lugar de en la misma sesión?

Para explicar más, he visto el código de hibernación que

  • obtiene una sesión de una fábrica de sesiones
  • abre una sesión
  • comienza una transacción
  • confirma la transacción
  • cierra el sesión

Lo que necesito para ¿Sabes cuál es la importancia de una sesión aquí? ¿Por qué no tener algo así como una fábrica de transacciones, comenzar la transacción y comprometer la transacción?

+1

"¿Cuándo debería tener acceso a la base de datos en dos sesiones en lugar de hacerlo en la misma sesión?" https://developer.atlassian.com/display/CONFDEV/Hibernate+Sessions+and+Transaction+Management+Guidelines –

+0

FYI - hay una página de wikipedia: http://en.wikipedia.org/wiki/Session_(computer_science) –

Respuesta

18

Session es más que una simple transacción, es una implementación del patrón UnitOfWork. En otras palabras, se aferra a los objetos cargados, sabe qué objetos deben conservarse, etc.

Una unidad de trabajo realiza un seguimiento de todo lo que hace durante una transacción comercial que puede afectar la base de datos. Cuando termine, descubrirá todo lo que se debe hacer para modificar la base de datos como resultado de su trabajo.

Para comprender mejor la relación entre la sesión y la transacción, puede consultar this article.

Una única sesión de Hibernate puede tener el mismo alcance que una transacción de base de datos única.

Este es el modelo de programación más común utilizado para el patrón de implementación de sesión por solicitud. Una sola sesión y una única transacción de base de datos implementan el procesamiento de un evento de solicitud particular (por ejemplo, una solicitud Http en una aplicación web). ¡Nunca use el anti patrón de sesión por operación! (Hay excepciones muy raras cuando la sesión por operación puede ser apropiada, no las encontrará si solo está aprendiendo Hibernate.)

Otro modelo de programación es el de Conversaciones largas, p. una aplicación que implementa un diálogo de pasos múltiples, por ejemplo un diálogo de asistente, para interactuar con el usuario en varios ciclos de solicitud/respuesta. Una forma de implementar esto es el patrón de sesión por solicitud con objetos separados. Una vez que los objetos persistentes se consideran separados durante el tiempo de reflexión del usuario y tienen que volverse a unir a una nueva sesión después de que se hayan modificado.

Sin embargo, se recomienda el patrón de sesión por conversación. En este caso, una sola sesión tiene un alcance mayor que una sola transacción de base de datos y puede abarcar varias transacciones de base de datos. Cada evento de solicitud se procesa en una única transacción de base de datos, pero el enrojecimiento de la sesión se retrasará hasta el final de la conversación y la última transacción de la base de datos, para que la conversación sea atómica. La sesión se mantiene en estado desconectado, sin conexión de base de datos abierta, durante el tiempo de reflexión del usuario. El control de concurrencia optimista automático de Hibernate (con control de versiones) se utiliza para proporcionar aislamiento de conversación.

5

@Dmitry ha respondido muy bien.

Otra forma de ver la sesión es como Instance of Database Usage. Cuando crea una sesión, tiene un contexto listo para cualquier interacción de la base de datos con los servicios de soporte (por ejemplo, transacción, almacenamiento en caché, conexión, etc.) que se requieren. Una transacción es un servicio independiente utilizado dentro de la sesión.

También la sesión es la memoria caché de primer nivel utilizada por las herramientas típicas de mapeo OR como hibernar. La sesión actúa como un contexto temporal creado a petición para facilitar una interacción DB.

Cuestiones relacionadas