¿Hay alguna otra forma de evitar LazyInitializationExceptions en una aplicación web Hibernate además de utilizar el patrón OpenSessionInView? ¿Hay algún inconveniente al usar OpenSessionInView?Estrategias para evitar Hibernate LazyInitializationExceptions
Respuesta
Al trabajar en nuestras aplicaciones web, generalmente decidimos de antemano qué objetos/campos se necesitarán en las páginas de vista y nos aseguramos de que todos los objetos se inicializan correctamente desde el modelo antes de enviarlos a la vista.
Esto se puede lograr de (al menos) tres maneras:
- fetching propiedades utilizando la estrategia ansiosos (es decir, con
FetchMode.JOIN
, si usted está utilizando los Criteria API) - propiedades de inicialización explícita (es decir, con
Hibernate.initialize(property)
) - implícitamente inicializar las propiedades para llamar a la propiedad de acceso apropiada
Acerca de las desventajas de OpenSessionInView, ¿has echado un vistazo a la página this?
Por lo general, la mejor manera de manejar el problema, sin tomar una decisión global para hacer una búsqueda emocionante; es usar la palabra clave "fetch" en conjunción con la consulta hql.
De http://www.hibernate.org/hib_docs/reference/en/html/queryhql-joins.html
Además, un "fetch" join permite asociaciones o colecciones de valores que se inicializan junto con sus objetos padres, usando una sola selección. Esto es particularmente útil en el caso de una colección. Con eficacia anula la combinación externa y las declaraciones vagas del archivo de asignación para asociaciones y colecciones. Consulte la Sección 19.1, "Estrategias de recuperación" para obtener más información.
de Cat como gato combinación interna traiga cat.mate dejó unirse a ir a buscar cat.kittens
Cambiar a JBoss Seam.
El marco Seam está bien diseñado por los chicos que desarrollaron Hibernate.
Incluso con la sesión abierta en la vista, es posible que todavía tenga algunos problemas. Según la complejidad de su aplicación web, Abrir sesión en vista no maneja todos los casos. También he tenido problemas para mostrar datos (en la interfaz de usuario) como captar entidades durante un trabajo de cuarzo, como enviar un correo electrónico.
Hibernate ya obtiene de forma inteligente los datos, cambiar el modo de búsqueda provocará la degradación del rendimiento. No solo eso, sino que te estás alejando de las convenciones y arruinará tu proyecto con detalles de configuración extraños.
tutoriales Walter
El Oracle Java señalan que "los granos de la empresa de transacciones de apoyo, los mecanismos que gestionan el acceso concurrente de objetos compartidos". Entonces, para manejar los problemas de Lazy Fetch, creo un Bean de sesión Java Stateless y luego obtengo todas las subclases que necesito antes de regresar del método. Oracle también se ha referido a esto como un patrón central J2EE de "Fachada de Sesión". Estas prácticas parecen prácticas de aplicación mucho mejores que algunas de las otras mencionadas.
- 1. Estrategias arquitectónicas para evitar moldes dinámicos
- 2. .Net - estrategias para evitar la cadena mágica
- 3. antipatrón antipatrón: estrategias para evitar, antídotos para ayudar a curar
- 4. Estrategias para encontrar Heisenbugs
- 5. Clojure para estrategias comerciales
- 6. Por qué org.hibernate.TransactionException en Hibernate y evitar
- 7. Buscando estrategias de fuente para aplicaciones Silverlight
- 8. estrategias de tareas para manejar HardDeadlineExceededError
- 9. Estrategias para depurar problemas de estabilidad numérica?
- 10. Estrategias para el reemplazo de objetos sistémicos
- 11. Estrategias para asignar vistas en NHibernate
- 12. Estrategias efectivas para estudiar marcos/bibliotecas parcialmente
- 13. Estrategias para actualizar o versionar servicios web?
- 14. Estrategias para tuberías concurrentes en Java
- 15. Estrategias para JavaScript console.log/trace, etc
- 16. Estrategias para repetir gran parte del análisis
- 17. Estrategias para el cifrado con Django + Postgres?
- 18. ¿Buenas estrategias para desarrollar código desechable?
- 19. Estrategias para verificar ISNULL en campos varbinary?
- 20. Evitar que Dozer active la carga diferida de Hibernate
- 21. Evitar la reversión de transacción en JBoss + Hibernate
- 22. Cómo evitar la combinación externa de estilo antiguo (+) en Hibernate?
- 23. Estrategias de ramificación
- 24. ¿Cómo puedo evitar que Hibernate actualice los valores NULL?
- 25. estrategias de aplicación hashCode
- 26. Estrategias de prueba EJB?
- 27. autocompletar, papeles, estrategias, etc
- 28. Trialware/estrategias de licencia
- 29. Estrategias en Scala
- 30. Estrategias para desarrollar múltiples productos desde One Codebase
Hibernate 4.1.6 resuelve esto: http://stackoverflow.com/questions/578433/how-to-solve-lazy-initialization-exception-using-jpa-and-hibernate-as-provider/11913404#11913404 – andreak