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

questionAnswers(2)

yourAnswerToTheQuestion