Ele retorna o objeto com as collections não inicializadas… e qdo
tento acessá-las dá erro…
O problema é que eu não posso dar o closeSession() qdo utilizo
lazy=true? É isso mesmo?
Qual seria a solução para isso? tirar o closeSession?
A estratégia que eu usei para resolver este problema foi passando um booleano como parâmetro. Esse booleano informa se é para inicializar as coleções.
Depois um criei um classe utilitária que percorre o objeto recursivamente(usando reflection). Toda coleção que ele acha ele pede pro hibernate inicializar.
Com o código que vc passou ficaria desse jeito:
protected Object retrieveObj(Class c, Long id, boolean inicializarColecoes)
throws DAOException {
Object obj = null;
try {
Session session = HibernateSession.currentSession();
obj = session.load(c, id);
// Chamada do método que inicializa as coleções
if( inicializarColecoes ) {
Util.inicializarColecoes( obj );
}
}
catch(HibernateException he) {
he.printStackTrace();
throw new DAOException(he);
}
finally {
closeSession();
}
return obj;
}
Oi,
Também estou para implementar a mesma solução via relfexão para inicializar as coleções.
Seria uma mão na roda para mim se vc passasse o código…
Ademias, vou permitir q o cliente indique quais coleções ele quer inicializar…coisa q não percebi no seu trecho de código…