Caros colegas estou estou desenvolvendo um projeto um pouco mais complexo do que o normal e criei algumas classes bases, porém na parte de consulta estou percebendo uma demora excessiva do Hibernate para consultar o banco (cerca de 5000 linhas) e gostaria de saber se está faltando alguma configuraçào ou é assim mesmo.
publicList<T>listaCompleta(){
Queryq=getEntityManager().createQuery("SELECT e FROM fatd e");returnq.getResultList();
}
O Hibernate faz milhoes de consultas ao banco e depois alguns minutos é que ele retorna…
Sua entidade tem mtos relacionamentos?
Se tiver e você não precisar deles para a maioria das coisas, coloque-os como lazy.
[]´s
zoren
talves seja algum problema com seu mapeamento
os atributos estão como lazy??
ciczan
Para verificar desempenho é bom desligar o log SQL. Isso muda bastante as coisas.
Paulo_Silveira
ola androdana
se voce esta apenas testando essa query, é possivel que voce esteja vendo tambem ai o log de bootstrap de uma sessionfactory. depois que o hibernate “sobe”, tudo vai ser mais rapido. experimente rodar mais de uma query durante a mesma execucacao de jvm.
A
androdana
Amigos, de ante mão gostaria de agradecer pelas respostas, mas vamos lá:
Minhas entidades têm muitos relacionamentos e nào defini o fetch delas, deixando a critério standart
Eu estou com o log ativado, mas a quantidade de query feitas é muito… grande… independente dele…
Nào estou confundindo com as informações de quando o hibernate levanta, pois estou usando Spring também e ele levanta depois, e ainda eu estou limpando os logs após o levantamento e deixando apenas para a consulta…
Acredito que talvez tenha alguma configuração, porém acho muito lento…
Aguardo
dwduncan
Poste seu xml de configuração do spring, pelo menos a parte que configura a persistência.
Este é o xml do spring completo conforme solicitado…
rodrigo_gomes
Coloque também o mapeamento de sua entidade que ta com problema de lentidão (não esqueça de usar as tags “code” para facilitar a visualização do código)
Você pode fazer outro teste: coloque lazy como “true” e coloque o fetch para “join” e veja o que acontece.
dwduncan
Bem, cerca de 5 mil objetos de uma só vez acredito que seja desnecessário, tente paginar suas consultas, 30 por vez, por exemplo. O ganho de desempenho nesse caso é absurdo, sem contar na estabilidade, ou seja, por mais dados que sua tabela receba, na hora em que a query for executada ela permanecerá sempre com um tempo de resposta constante.
Se for necessário obter médias, somas e etc dentre esses 5000 objetos, utilize querys especificas do JPA/Hibernate para isso.
A
androdana
Já paginei por 20 e melhorou o desempenho… porém durante a passagem de páginas apareceu o erro de Lazy inicialization do hibernate, apesar de eu ter colocado o filtro no web.xml para que nào aparecesse…