Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Performance nas Queries

Olá tudo bem?

quando executo a consulta de produtos por loja consultei o log do tomcat e é me apresentado a seguinte query

Hibernate: select produto0_.id as id1_3_, produto0_.descricao as descrica2_3_, produto0_.linkDaFoto as linkDaFo3_3_, produto0_.loja_id as loja_id6_3_, produto0_.nome as nome4_3_, produto0_.preco as preco5_3_ from Produto produto0_ inner join CATEGORIA_PRODUTO categorias1_ on produto0_.id=categorias1_.Produto_id inner join Categoria categoria2_ on categorias1_.categorias_id=categoria2_.id where produto0_.loja_id=2
Hibernate: select loja0_.id as id1_2_0_, loja0_.nome as nome2_2_0_ from Loja loja0_ where loja0_.id=?
`

O hibernate executa 2 selects visto que só foi feito um join com a tabela categoria e não com a tabela loja, se eu quiser otimizar ainda mais essa query e disparar apenas 1 select eu devo também fazer o join de produto com loja? em queries onde o objeto selecionado tem muitos relacionamentos é uma boa prática fazer todos os joins para que o hibernate execute menos selects?

1 resposta
solução!

Oi Ricardo, tudo bem?

Se você quer trazer a loja na primeira query, você pode fazer um join fetch (eu imagino que esteja usando criteria)

Join<Produto, Integer> join = produtoRoot.join("loja");
produtoRoot.fetch("loja");

Quanto a sua questão, eu imagino que o dispare otimizações no join. Não acredito que haja um vencedor muito claro, acho que o ideal é medir o desempenho e decidir :)

Abraços!