"Hibernate" Otimizar consultas geradas pelo Criteria  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
paulofafism
JavaEvangelist
[Avatar]

Membro desde: 02/05/2006 15:30:50
Mensagens: 475
Offline

Pessoal gostaria de otimizar as consultas geradas pelo criteria do hibernate.

Para explicar meu problema vou utilizar a entidade ContasReceber do meu sistema.

Possuo uma Entitade chamada ContasReceber que se relaciona com mais outras entidades: Cliente, Natureza, Empresa, TipoDocumento.
Quando executo uma consulta, a SQL gerada retorna para mim todos os relacionamentos das minha entidades que estão envolvida na consulta. Ou seja se minha entidade Cliente que se relaciona com mais ou três entidades ela esta me trazendo o join desses outras entidade etc..., se o TipoDocumento se relacionada com outras entidades também esta me trazendo o join com essas entidades, fazendo com que a consulta se torne mais lenta e grande

Eu so queria o SQL viesse somente os JOINS envolvidos na Entidade ContasReceber ou seja Cliente, Natureza, Empresa e TipoDocumento

Segue abaixo minha entidade ContasReceber. Repetindo somente gostaria que meu SQL retorna-se os Join envolvidos nessa entidade ContasReceber




Vejam o SQL Monstruoso que é gerado





This message was edited 1 time. Last update was at 08/08/2009 20:25:19


Paulo Vinícius Moreira Dutra

Perfil Linkedin
Lattes

Paulo Viníciu's Blog
[WWW]
Paulo Silveira
Administrador
[Avatar]

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

Ola

Voce pode postar pra gente qual consulta voce esta fazendo? É um HQL/Criteria por "numeroconta"? Qual exatamente?

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


[Email] [WWW]
paulofafism
JavaEvangelist
[Avatar]

Membro desde: 02/05/2006 15:30:50
Mensagens: 475
Offline

Estou usando Criteria

Paulo Vinícius Moreira Dutra

Perfil Linkedin
Lattes

Paulo Viníciu's Blog
[WWW]
Paulo Silveira
Administrador
[Avatar]

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

paulo, tire o @Fetch(FetchMode.JOIN) dos atributos que você não quer que venham nessa query.

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


[Email] [WWW]
paulofafism
JavaEvangelist
[Avatar]

Membro desde: 02/05/2006 15:30:50
Mensagens: 475
Offline

paulo, tire o @Fetch(FetchMode.JOIN) dos atributos que você não quer que venham nessa query.


Obrigado pela dica xará rsss. Funcionou do jeito que eu queria, mais tive que mudar o elemento
fetch = FetchType.LAZY para fetch = FetchType.EAGER pois estava me gerando o erro de LazyLoadingException.
Agora ta perfeito






Paulo Vinícius Moreira Dutra

Perfil Linkedin
Lattes

Paulo Viníciu's Blog
[WWW]
Paulo Silveira
Administrador
[Avatar]

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

paulofafism wrote:Funcionou do jeito que eu queria, mais tive que mudar o elemento
fetch = FetchType.LAZY para fetch = FetchType.EAGER pois estava me gerando o erro de LazyLoadingException.
Agora ta perfeito


Cuidado Paulo! Agora, apesar de ele nao estar fazendo join para buscar as outras entidades relacionadas, ele esta sim buscando-as antes mesmo de precisar. O melhor é deixar lazy, e utilize o open session in view para nao tomar o LazyInitializationException:
https://www.hibernate.org/43.html

E de uma olhada em algumas dicas que escrevi sobre o hibernate ha algum tempo:
http://blog.caelum.com.br/2008/01/28/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/


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


[Email] [WWW]
paulofafism
JavaEvangelist
[Avatar]

Membro desde: 02/05/2006 15:30:50
Mensagens: 475
Offline

Fala paulo

Esse padrão Open Session View somente é aplicado para projetos web? Pois o projeto que estou fazendo e uma aplicação Desktop. Estou utilizando Glassfish +EJB e SQLServer para esse projeto, so futuramente será feito o modúlo WEB.
Mais esse padrão Open Session tem como ser aplicado em aplicações Desktop?

Paulo Vinícius Moreira Dutra

Perfil Linkedin
Lattes

Paulo Viníciu's Blog
[WWW]
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team