Hibernate 2x: lazy="true" não funciona?

2 respostas
T

Boa tarde,

Recentemente começei a trabalhar com o hibernate 2x e quanto a construção e implementação de seu framework, não tive problemas. Porém, estou tendo sérios problemas de performance devido a instanciação de objetos que possuem relacionamentos do tipo:

<class name="Usuario" table="Tabela_Usuario">
.
.
.
<set name="conteudosByAlteradoPor" lazy="true" inverse="true" cascade="none" >
	        <key>
	            <column name="alteradoPor" />
	        </key>
	        <one-to-many class="Conteudo"/>
</set>
<!-- bi-directional one-to-many association to Tabela_Conteudo -->
<set name="conteudosByAutor" lazy="true" inverse="true">
	        <key>
	            <column name="autor" />
	        </key>
	        <one-to-many class="Conteudo"/>
</set>
<!-- bi-directional one-to-many association to Tabela_Conteudo -->
<set name="conteudosByCriadoPor" lazy="true" inverse="true">
	        <key>
	            <column name="criadoPor" />
	        </key>
                        <one-to-many class="Conteudo"/>
</set>
.
.
.
</class>

Onde, ao realizar a consulta:

public Usuario getUsuarioByLogin(String login) throws DAOException {
        try {
            Usuario usrRet = (Usuario) session.createCriteria(Usuario.class).add(Expression.eq("login", login)).add(
                    Expression.eq("deletado", Boolean.FALSE)).uniqueResult();
            return usrRet;
        } catch (HibernateException e) {
            e.printStackTrace();
            throw new DAOException(e);
        }
    }

aqueles atributos acima mapeados no xml, são populados.
Quando eu seto lazy="true" não seria esperado que tais atributos não fossem populados? pois bem, ao acompanha-lo no debug mode da minha IDE, vejo que logo após a execução da consulta, ele é populado.
Gostaria de saber se existe algum erro na configuração ou código pois isso esta afetando a performance da aplicação.

obrigado

2 Respostas

passos

O normal seria ele não inicializar a coleção.

Quando vc tenta acessar uma dessas coleções elas realmente estão populadas?

Você ta vendo a query que ele ta fazendo? da um show_sql no seu arquivo de configuração

T

Sim, o pior é que elas estão com mais de um nível de instanciação (varios objetos internos estão populados com mais outros objetos). Abri o Set e vasculhei o hashset e encontrei pelo menos 4 objetos instanciados e dentro dele ainda consegui ver que ele tinha populado mais níveis. Outro fato que me deixou ainda mais confuso foi que a variável initialized estava setada como true!!!
Não sei o que pode ser, talvez a configuração esteja causando isso. Alguém tem algum palpite?
Quanto ao show_sql, ele realmente está realizando todas as queries referente a tabela que eu setei como lazy=“true”.

Criado 14 de julho de 2005
Ultima resposta 14 de jul. de 2005
Respostas 2
Participantes 2