Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Por que há várias querys quando o banco está vazio?

Olá,

Observei que quando o banco está vazio após inicializar a aplicação há a saída abaixo no console, por que isso acontece? É devido ao mapeamento? Existe alguma configuração para isso não acontecer pois pode interferir na performance, não?

Grato pela atenção.

13:34:02,063 INFO  [stdout] (http-localhost-127.0.0.1-8080-4) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

13:34:06,845 INFO  [stdout] (http-localhost-127.0.0.1-8080-4) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

13:34:06,848 INFO  [stdout] (http-localhost-127.0.0.1-8080-4) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

13:34:06,863 INFO  [stdout] (http-localhost-127.0.0.1-8080-4) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

13:34:06,863 INFO  [stdout] (http-localhost-127.0.0.1-8080-4) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

13:34:06,879 INFO  [stdout] (http-localhost-127.0.0.1-8080-4) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_

13:34:06,879 INFO  [stdout] (http-localhost-127.0.0.1-8080-4) Hibernate: select autor0_.id as id0_, autor0_.nome as nome0_ from Autor autor0_
8 respostas

Oi Hugo, isso não interfere na performance, mas é útil para debugar suas HQL, você pode desativar essa função editando seu Hibernate.cfg.xml mudando de true para false essa linha:

<property name="show_sql">false</property>

Philippe, eu estava com essa duvida também, sim, essa propriedade é para mostrar, mas qual a razão de uma request de um mesmo objeto retornar varias querys repetidas?

Não interfere, você quer dizer que não influencía, ou é pouco notada, essa influencia?

Bom, pra entender melhor a razão de ele estar imprimindo isso várias vezes teria que dar uma olhada em seu DAO e seu Controller.

A questão de ele imprimir a query não interfere na performance, mas o fato de ele estar fazendo várias querys iguais em um mesmo request influencia sim.

Observo que isso acontece sempre em mapeamentos many qualquer que seja ele. Os daos estão mapeados conforme a especificação, não entendo por que de tantas querys.

Em relacionamentos pode ser comum o caso do n+1 se não tratado de forma adequada, porém com apenas um objeto é estranho, em um sample aqui, acontece a mesma coisa, imagino se tem relação a algum escopo, talvez seja o paginator do datatable, vou testar depois.

solução!

Oi Hugo,

vc está usando EJB/JPA com JSF?

O JPA só executa as queries se "alguem" está pedindo :) Muito provável que o JSF está executando alguns "getters" no seus ManagedBeans que usam JPA por baixo dos panos.

Nessa caso é preciso ver como vc pode cachear os resultados dentre de uma requisição para evitar várias queries, mas isso depende da sua aplicação e o uso do JSF, ok?

abs

aaaah!

Entendi, os getters.

Valeu, agora eu entendi!

Fiz alguns testes aqui, e o motivo era o DataTable do primefaces mesmo, mas eu tinha implementado como eager, apenas passava uma List diretamente.

Teve algumas situações bem estranhas, uma era que acontecia dois select em um carregando normal da pagina, outro era quando eu utilizava o search implementado manualmente, ele fazia de 6 a 12 selects, mesmo tendo apenas 6 registros no banco.

Acabei por resolver ao implementar o LazyDataModel, agora é um unico select em qualquer situação.

Lembrando que tudo isso ocorreu com apenas um objeto, sem relacionamento.