JPA Muito demorado... é assim mesmo?  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
androdana
Thread.start()

Membro desde: 26/05/2009 20:45:07
Mensagens: 47
Offline

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,,,
rodrigo_gomes
GUJ Master
[Avatar]

Membro desde: 25/11/2003 15:45:21
Mensagens: 1088
Localização: São Paulo
Offline

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

[]´s

rodrigo de paiva gomes




http://twitter.com/rod_gomes
[WWW] [MSN] [ICQ]
zoren
GUJ Master
[Avatar]

Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline

talves seja algum problema com seu mapeamento

os atributos estão como lazy??
[Email] [MSN]
ciczan
JavaGuru
[Avatar]

Membro desde: 22/12/2004 12:57:21
Mensagens: 227
Localização: Curitiba -PR
Offline

Para verificar desempenho é bom desligar o log SQL. Isso muda bastante as coisas.
[MSN]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

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.

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
androdana
Thread.start()

Membro desde: 26/05/2009 20:45:07
Mensagens: 47
Offline

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
JavaTeenager
[Avatar]

Membro desde: 03/06/2007 13:44:07
Mensagens: 159
Localização: Pirassununga SP
Offline

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

"Os que não querem raciocinar são fanáticos,
os que não sabem raciocinar são tolos e,
os que não ousam raciocinar são escravos "
Carlos Drummond de Andrade
ciczan
JavaGuru
[Avatar]

Membro desde: 22/12/2004 12:57:21
Mensagens: 227
Localização: Curitiba -PR
Offline

Seria util colocar o mapeamento do bean tb.
[MSN]
androdana
Thread.start()

Membro desde: 26/05/2009 20:45:07
Mensagens: 47
Offline

<beans xmlns="http://www.springframework.org/schema/beans"
xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:flow="http://www.springframework.org/schema/webflow-config"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-1.0.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"
default-autowire="byName"
default-dependency-check="none"
default-lazy-init="true">

<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"/>
</beans>

Este é o xml do spring completo conforme solicitado...
rodrigo_gomes
GUJ Master
[Avatar]

Membro desde: 25/11/2003 15:45:21
Mensagens: 1088
Localização: São Paulo
Offline

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.



rodrigo de paiva gomes




http://twitter.com/rod_gomes
[WWW] [MSN] [ICQ]
dwduncan
JavaTeenager
[Avatar]

Membro desde: 03/06/2007 13:44:07
Mensagens: 159
Localização: Pirassununga SP
Offline

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.

"Os que não querem raciocinar são fanáticos,
os que não sabem raciocinar são tolos e,
os que não ousam raciocinar são escravos "
Carlos Drummond de Andrade
androdana
Thread.start()

Membro desde: 26/05/2009 20:45:07
Mensagens: 47
Offline

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...
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team