¿Por qué Hibernate parecen ser diseñado por la corta duración de las sesiones?

StackOverflow https://stackoverflow.com/questions/124453

  •  02-07-2019
  •  | 
  •  

Pregunta

Sé que esto es una cuestión subjetiva, pero, ¿por qué Hibernate parecen ser diseñado por la corta duración de las sesiones?Generalmente en mis aplicaciones puedo crear DAOs a lo abstracto de mi capa de datos, pero ya no puedo predecir cómo los objetos de entidad se va a utilizar algunas de sus colecciones son perezosos cargado, o debería decir que no carga, una vez que se cierre la sesión.

¿Por qué no se diseño para que automáticamente se re-abrir la sesión, o tener sesiones de permanecer siempre abiertos?

¿Fue útil?

Solución

Porque una vez que usted se muda fuera de sus límites de las transacciones que usted no puede golpear la base de datos de nuevo sin necesidad de iniciar una nueva transacción.Desde hace mucho tiempo ejecutando transacciones 'por si acaso' es una cosa mala (tm).

Supongo que usted quiere a la carga perezosa objeto desde su punto de vista - echa un vistazo aquí para algunas opciones.Prefiero definir exactamente qué parte de el mapa del objeto que va a ser devuelto por mi sesión de fachada métodos.Me parece que esto hace que sea más fácil para la prueba de unidad y con el rendimiento a prueba mi nivel de negocios.

Otros consejos

He trabajado en una aplicación de escritorio que utiliza EJB y de Hibernación.Tenemos que establecer lazy=false en todas partes, porque cuando los objetos serializados, pierden su capacidad para ser traída desde el backend.Eso es sólo cómo va, por desgracia.

Si usted está preocupado con el rendimiento, puede utilizar el almacenamiento en caché en el servidor, de modo que su no perezosa recuperaciones no son tan dolorosas.

Estás buscando el OpenSessionInView patrón, que es esencialmente un filtro conceptual (y, a veces, implementado como un filtro de servlets) que detecta cuando una sesión debe ser transparente a abrir.Varios marcos de implementar esta manera se controla automáticamente.

Estoy escribiendo una aplicación de escritorio para el uso de un filtro no es aplicable.

Las conexiones son un recurso escaso que necesitan ser reciclados tan pronto como hayas terminado de usarlos.Si usted también está usando la agrupación de conexiones, conseguir otro cuando lo necesite debe ser rápido.Esta es la arquitectura que se han de utilizar para hacer los sitios web de la escala-a pesar de que usted es una aplicación de escritorio, sus casos de uso, probablemente concentrarse en la escalable sitios.

Si usted mira MS ADO.NET verá un enfoque similar en mantener conexiones abiertas por un corto tiempo, que tienen todo el offline modelo para la actualización de datos desconectado y, a continuación, aplicar a una base de datos cuando esté listo.

La hibernación está diseñado como un método para asignar Objetos a tablas de Base de datos Relacional.Logra que trabajo muy bien.Pero, no puede complacer a todos todo el tiempo.Creo que hay una cierta complejidad en el aprendizaje de cómo funciona la inicialización, pero una vez que usted consiga la caída de ella tiene sentido.No sé si era necesariamente "diseñado" para específicamente para la ira, es la forma en que sucedió.

Si iba a por arte de magia se vuelva a abrir sesiones en las que no webapps creo que la complejidad de aprendizaje en el marco de la medida outweight los beneficios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top