or que o hibernate hql distinto causa um sql distinto na junção esquerd
Eu tenho esse teste HQL:
select distinct o from Order o left join fetch o.lineItems
e issofa gere um SQL distinto sem uma razão óbvia:
select distinct order0_.id as id61_0_, orderline1_.order_id as order1_62_1_...
O conjunto de resultados SQL é sempre o mesmo (com e sem um SQL distinto):
order id | order name | orderline id | orderline name
---------+------------+--------------+---------------
1 | foo | 1 | foo item
1 | foo | 2 | bar item
1 | foo | 3 | test item
2 | empty | NULL | NULL
3 | bar | 4 | qwerty item
3 | bar | 5 | asdfgh item
Por que o hibernate gera o SQL distinto? O SQL distinto não faz sentido e torna a consulta mais lenta que o necessário. Isso é contrário aoPERGUNTAS FREQUENTE que menciona que hql distinto neste caso é apenas um atalho para o transformador de resultado:
session.createQuery ("selecione o distinto de Pedido ou junção à esquerda busca o.lineItems"). list ();
Parece que você está usando a palavra-chave SQL DISTINCT aqui. Claro, isso não é SQL, é HQL. Esse distinto é apenas um atalho para o transformador de resultado, neste caso. Sim, em outros casos, um HQL distinto será convertido diretamente em um SQL DISTINCT. Não neste caso: você não pode filtrar duplicatas no nível SQL, a própria natureza de um produto / associação proíbe isso - você deseja as duplicatas ou não obtém todos os dados necessários.
obrigad