Consulta usuario e senha lenta, gerando joins gigantes no hibernate

Fala pessoal,

Peguei um sistema pra fazer manutenção que foi feito com STRUTS 2 e hibernate, uma das coisas q tenho q fazer é resolver o problema de performance no momento do login que demora muito!

Eu não tenho muita experiencia com STRUTS e Hibernate, mas struts achei bem parecido com Spring MVC e ta fácil de me achar, o problema esta sendo com hibernate. No momento da consulta de usuário e senha as queries que o log me mostra que o hibernate ta gerando é gigante fazendo join com um monte de tabela que não tem nada haver e isso ta fazendo ficar muito lento, já fiz testes mudando a consulta, mas nada muda a gigantesca consulta que é feita no banco.

A consulta é feita praticamente assim:

Criteria criteria = session.createCriteria(Aluno.class); criteria.add(Restrictions.like("usuario", usuario)); criteria.add(Restrictions.like("senha", senha)); criteria.setFetchMode("deposito", FetchMode.JOIN); criteria.uniqueResult(); tx.commit();

e no meu log é gerada uma consulta gigante assim:
Alguém teria alguma idéia do pq isso ta funcionando, já dei uma estudada no hibernate, tentei fazer formatos de consultas diferentes, relacionamentos na consulta diferente, mas sempre acontece o mesmo, tbm já tentei mexer em algumas configurações no XML do hibernate, mas nada muda essa consulta que é feita.

Eu imagino que o hibernate esta se perdendo na hora de fazer o relacionamento, então vai tentando fazer o relacionamento com varias tabelas tentando achar o JOIN correto, não sei ao certo…

[quote]13:40:46,194 DEBUG C3P0PooledConnectionPool:319 - Test of PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@59e61026] on IDLE CHECK has SUCCEEDED.
13:40:46,195 DEBUG C3P0PooledConnectionPool:315 - Testing PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@5b1d329d] on IDLE CHECK.
13:40:46,203 DEBUG C3P0PooledConnectionPool:319 - Test of PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@74ae8af4] on IDLE CHECK has SUCCEEDED.
13:40:46,213 DEBUG C3P0PooledConnectionPool:319 - Test of PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@6ec44aaf] on IDLE CHECK has SUCCEEDED.
Hibernate: select curso0_.id as id12_2_, curso0_.NOME as NOME12_2_, curso0_.DATA_ENTRADA as DATA3_12_2_, curso0_.LIVRE as LIVRE12_2_, curso0_.url_blog as url5_12_2_, curso0_.url_post_blog_index as url6_12_2_, curso0_.url_post_blog_aula as url7_12_2_, curso0_.ID_ARQUIVO_IMG_GRANDE as ID8_12_2_, curso0_.ID_ARQUIVO_IMG as ID9_12_2_, arquivo1_.ID as ID3_0_, arquivo1_.DATA_ENTRADA as DATA2_3_0_, arquivo1_.NOME_ORIGINAL as NOME3_3_0_, arquivo1_.NOME as NOME3_0_, arquivo1_.FORMATO as FORMATO3_0_, arquivo1_.TAMANHO as TAMANHO3_0_, arquivo1_.RELATIVE_PATH as RELATIVE7_3_0_, arquivo2_.ID as ID3_1_, arquivo2_.DATA_ENTRADA as DATA2_3_1_, arquivo2_.NOME_ORIGINAL as NOME3_3_1_, arquivo2_.NOME as NOME3_1_, arquivo2_.FORMATO as FORMATO3_1_, arquivo2_.TAMANHO as TAMANHO3_1_, arquivo2_.RELATIVE_PATH as RELATIVE7_3_1_ from EAD_CURSOS curso0_ left outer join EAD_ARQUIVOS arquivo1_ on curso0_.ID_ARQUIVO_IMG_GRANDE=arquivo1_.ID left outer join EAD_ARQUIVOS arquivo2_ on curso0_.ID_ARQUIVO_IMG=arquivo2_.ID where curso0_.id=?
13:40:46,302 DEBUG C3P0PooledConnectionPool:319 - Test of PooledConnection [com.mchange.v2.c3p0.impl.NewPooledConnection@5b1d329d] on IDLE CHECK has SUCCEEDED.
Hibernate: select curso0_.id as id12_2_, curso0_.NOME as NOME12_2_, curso0_.DATA_ENTRADA as DATA3_12_2_, curso0_.LIVRE as LIVRE12_2_, curso0_.url_blog as url5_12_2_, curso0_.url_post_blog_index as url6_12_2_, curso0_.url_post_blog_aula as url7_12_2_, curso0_.ID_ARQUIVO_IMG_GRANDE as ID8_12_2_, curso0_.ID_ARQUIVO_IMG as ID9_12_2_, arquivo1_.ID as ID3_0_, arquivo1_.DATA_ENTRADA as DATA2_3_0_, arquivo1_.NOME_ORIGINAL as NOME3_3_0_, arquivo1_.NOME as NOME3_0_, arquivo1_.FORMATO as FORMATO3_0_, arquivo1_.TAMANHO as TAMANHO3_0_, arquivo1_.RELATIVE_PATH as RELATIVE7_3_0_, arquivo2_.ID as ID3_1_, arquivo2_.DATA_ENTRADA as DATA2_3_1_, arquivo2_.NOME_ORIGINAL as NOME3_3_1_, arquivo2_.NOME as NOME3_1_, arquivo2_.FORMATO as FORMATO3_1_, arquivo2_.TAMANHO as TAMANHO3_1_, arquivo2_.RELATIVE_PATH as RELATIVE7_3_1_ from EAD_CURSOS curso0_ left outer join EAD_ARQUIVOS arquivo1_ on curso0_.ID_ARQUIVO_IMG_GRANDE=arquivo1_.ID left outer join EAD_ARQUIVOS arquivo2_ on curso0_.ID_ARQUIVO_IMG=arquivo2_.ID where curso0_.id=?
Hibernate: select curso0_.id as id12_2_, curso0_.NOME as NOME12_2_, curso0_.DATA_ENTRADA as DATA3_12_2_, curso0_.LIVRE as LIVRE12_2_, curso0_.url_blog as url5_12_2_, curso0_.url_post_blog_index as url6_12_2_, curso0_.url_post_blog_aula as url7_12_2_, curso0_.ID_ARQUIVO_IMG_GRANDE as ID8_12_2_, curso0_.ID_ARQUIVO_IMG as ID9_12_2_, arquivo1_.ID as ID3_0_, arquivo1_.DATA_ENTRADA as DATA2_3_0_, arquivo1_.NOME_ORIGINAL as NOME3_3_0_, arquivo1_.NOME as NOME3_0_, arquivo1_.FORMATO as FORMATO3_0_, arquivo1_.TAMANHO as TAMANHO3_0_, arquivo1_.RELATIVE_PATH as RELATIVE7_3_0_, arquivo2_.ID as ID3_1_, arquivo2_.DATA_ENTRADA as DATA2_3_1_, arquivo2_.NOME_ORIGINAL as NOME3_3_1_, arquivo2_.NOME as NOME3_1_, arquivo2_.FORMATO as FORMATO3_1_, arquivo2_.TAMANHO as TAMANHO3_1_, arquivo2_.RELATIVE_PATH as RELATIVE7_3_1_ from EAD_CURSOS curso0_ left outer join EAD_ARQUIVOS arquivo1_ on curso0_.ID_ARQUIVO_IMG_GRANDE=arquivo1_.ID left outer join EAD_ARQUIVOS arquivo2_ on curso0_.ID_ARQUIVO_IMG=arquivo2_.ID where curso0_.id=?
Hibernate: select curso0_.id as id12_2_, curso0_.NOME as NOME12_2_, curso0_.DATA_ENTRADA as DATA3_12_2_, curso0_.LIVRE as LIVRE12_2_, curso0_.url_blog as url5_12_2_, curso0_.url_post_blog_index as url6_12_2_, curso0_.url_post_blog_aula as url7_12_2_, curso0_.ID_ARQUIVO_IMG_GRANDE as ID8_12_2_, curso0_.ID_ARQUIVO_IMG as ID9_12_2_, arquivo1_.ID as ID3_0_, arquivo1_.DATA_ENTRADA as DATA2_3_0_, arquivo1_.NOME_ORIGINAL as NOME3_3_0_, arquivo1_.NOME as NOME3_0_, arquivo1_.FORMATO as FORMATO3_0_, arquivo1_.TAMANHO as TAMANHO3_0_, arquivo1_.RELATIVE_PATH as RELATIVE7_3_0_, arquivo2_.ID as ID3_1_, arquivo2_.DATA_ENTRADA as DATA2_3_1_, arquivo2_.NOME_ORIGINAL as NOME3_3_1_, arquivo2_.NOME as NOME3_1_, arquivo2_.FORMATO as FORMATO3_1_, arquivo2_.TAMANHO as TAMANHO3_1_, arquivo2_.RELATIVE_PATH as RELATIVE7_3_1_ from EAD_CURSOS curso0_ left outer join EAD_ARQUIVOS arquivo1_ on curso0_.ID_ARQUIVO_IMG_GRANDE=arquivo1_.ID left outer join EAD_ARQUIVOS arquivo2_ on curso0_.ID_ARQUIVO_IMG=arquivo2_.ID where curso0_.id=?

[/quote]

Por que é que o pessoal tem a mania de usar “like”? Para usuário e senha não use “like” (que costuma gerar um “LIKE” no SQL e por conseguinte costuma gerar um “full table scan”) e sim “eq” :frowning:

se você reparar, o select tá consultando até curso.

Veja os seus relacionamentos estão como EAGER.

Devo os relacionamentos no banco pelas CONSTRAINS ou nos XMLs mapeados do Hibernate?

to vendo q não existe o XML mapeado da tabela Aluno, dentro do XML da tabela Usuario a tabela Aluno tá como subclass

[code]


[/code]