Corrígeme si algo está mal.DAO, Spring e Hibernate
Ahora cuando usamos Spring DAO para plantillas ORM, cuando usamos el atributo @Transactional, , no tenemos control sobre la transacción y/o sesión cuando el método se llama externamente, no dentro del método.
La carga diferida ahorra recursos, menos consultas al db, menos memoria para mantener todas las colecciones recuperadas en la memoria de la aplicación.
Por lo tanto, si lazy = false, todo se recupera, todas las colecciones asociadas, eso no es efectivo, si hay 10,000 registros en un conjunto vinculado.
Ahora, tengo un método en una clase DAO que se supone que me devuelve un objeto User. Tiene colecciones que representan tablas vinculadas de la base de datos. Necesito obtener un objeto por identificación y luego consultar sus colecciones.
La excepción Hibernate "no se pudo inicializar lazmente una colección" se produce cuando intento acceder a la colección vinculada que devuelve este método DAO.
Explique por favor, ¿qué es una solución aquí?
Actualización: Bien, déjame preguntarte esto. DAO es una capa abstracta, por lo que se supone que un método "getUserById (Id. De enteros)" devuelve un Objeto.
¿Qué pasa si en algunos casos necesito estas colecciones vinculadas del objeto Usuario y en otra situación necesito esas colecciones.
hay sólo dos maneras: 1) la carga diferida = false 2) crear diferentes métodos: getUserByIdWithTheseCollections(),() getUserByIdWithOtherCollections y dentro de esos métodos utilizar su enfoque?
Quiero decir, ¿hay solo 2 formas y nada mejor?
Actualización 2: Explique por favor, ¿qué me daría el uso explícito de SESSIONFACTORY? ¿Cómo se ve en la práctica? Creamos una instancia de objeto DAO, y luego lo inyectamos con la fábrica de sesiones y esto significa que dos llamadas consecuentes al método a DAO se ejecutarán dentro de la misma transacción. Me parece que, de todos modos, ¡DAO está separado de las clases que lo usan!
La lógica y las transacciones están encapsuladas dentro de DAO, ¿verdad?
@Konrad Garus Por favor, vea mi posdata de la pregunta, aquí el texto es menos legible, así que le pregunto allí. – EugeneP
@EugeneP Ver respuesta actualizada. –