JPA Muito demorado... é assim mesmo?

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.

public List<T> listaCompleta() {
   Query q=getEntityManager().createQuery("SELECT e FROM fatd e");
    return q.getResultList();

}

O Hibernate faz milhoes de consultas ao banco e depois alguns minutos é que ele retorna…

aguardo alguma sugestão,

Sua entidade tem mtos relacionamentos?
Se tiver e você não precisar deles para a maioria das coisas, coloque-os como lazy.

[]´s

talves seja algum problema com seu mapeamento

os atributos estão como lazy??

Para verificar desempenho é bom desligar o log SQL. Isso muda bastante as coisas.

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.

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

Poste seu xml de configuração do spring, pelo menos a parte que configura a persistência.

Seria util colocar o mapeamento do bean tb.

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />

</bean>

<tx:annotation-driven />
<context:annotation-config/>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/sucoiteste" />
    <property name="username" value="root" />
    <property name="password" value="add" />
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="NovoSucoiPU" />
</bean>



<bean name="alunos" class="intraer.afa.model.Alunos" scope="prototype"/>
<bean name="daoAlunos" class="intraer.afa.model.dao.impl.DaoAlunosImpl"/>
<!--<bean name="cadastroAnterior" class="intraer.afa.model.Alunos" scope="prototype"/>-->

<bean name="cadastro" class="intraer.afa.model.Cadastro" scope="session"/>
<bean name="daoCadastro" class="intraer.afa.model.dao.impl.DaoCadastroImpl"/>

<bean name="dadosComplementaresAluno" class="intraer.afa.model.DadosComplementaresAluno" scope="prototype"/>

<bean name="dadosComplementaresEfetivo" class="intraer.afa.model.DadosComplementaresEfetivo" scope="prototype"/>
<bean name="emergencia" class="intraer.afa.model.Emergencia" scope="prototype"/>
<bean name="endereco" class="intraer.afa.model.Endereco" scope="prototype"/>
<bean name="entidade" class="intraer.afa.model.Entidade" scope="prototype"/>

<bean name="parente" class="intraer.afa.model.Parente" scope="prototype"/>
<bean name="util" class="intraer.afa.model.Util" scope="prototype"/>

<bean name="nacionalidade" class="intraer.afa.model.Nacionalidade" scope="prototype"/>
<bean name="daoNacionalidades" class="intraer.afa.model.dao.impl.DaoNacionalidadesImpl"/>

<bean name="turma" class="intraer.afa.model.Turma" scope="prototype"/>
<bean name="daoTurma" class="intraer.afa.model.dao.impl.DaoTurmaImpl"/>

<bean name="turmaAula" class="intraer.afa.model.TurmaAula" scope="prototype"/>
<bean name="daoTurmaAula" class="intraer.afa.model.dao.impl.DaoTurmaAulaImpl"/>

<bean name="veiculo" class="intraer.afa.model.Veiculo" scope="prototype"/>
<bean name="daoVeiculo" class="intraer.afa.model.dao.impl.DaoVeiculoImpl"/>

<bean name="punicao" class="ccaer.punicao" scope="prototype"/>
<bean name="daoPunicao" class="dao.DaoPunicaoImpl"/>

<bean name="fobs" class="ccaer.fobs" scope="prototype">
    <property name="observadorCadete" ref="alunos"/>
    <property name="observadorOficial" ref="cadastro"/>
    <property name="turmaCadete" ref="turma"/>
    <property name="cadastrador" ref="cadastro"/>
</bean>
<bean name="daoFobs" class="dao.DaoFobsImpl"/>

<bean name="fatd" class="ccaer.fatd" scope="prototype">
    <property name="fob" ref="fobs"/>
    <property name="cadastrador" ref="cadastro"/>
    <property name="codautoridade" ref="cadastro"/>
    <property name="cmtccaer" ref="cadastro"/>
    <property name="codofaudiencia" ref="cadastro"/>
</bean>    
<bean name="daoFatd" class="dao.DaoFatdImpl"/>


<bean name="alunosProvider" class="provider.AlunosProvider"/>
<bean name="cadastroProvider" class="provider.CadastroProvider"/>
<bean name="fatdProvider" class="provider.FatdProvider"/>

Este é o xml do spring completo conforme solicitado…

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.

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.

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…