Lazy collections + Thread Local Session

Olá pessoal!!!

Estou me batendo um pouco com o hibernate e lazy collections…

Estou usando o padrão “Thread Local Session” e minhas collections
são “lazy=true”. Abaixo um metodo do meu objeto DAO que recupera um
objeto do banco.

[code]protected Object retrieveObj(Class c, Long id) 
    throws  DAOException {
    Object obj = null;

    try {
        Session session = HibernateSession.currentSession();
        obj = session.load(c, id);
    }
    catch(HibernateException he) {
        he.printStackTrace();
        throw new DAOException(he);
    }
    finally {
        closeSession();
    }
    return obj;
}[/code]

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?

Ou… estou viajando e não é nada disso… :?:

Alguem tem alguma sugestão?

Agradeço a atenção dispensada,

Teh mais!

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; 
    }

Acho que é isso.
Abraços.

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…

Tô esperando…depois pago uma ceva…

Valeu :slight_smile: