У меня есть этот тест HQL:
select distinct o from Order o left join fetch o.lineItems
и он создает SQL-отчет без очевидной причины:
select distinct order0_.id as id61_0_, orderline1_.order_id as order1_62_1_...
Набор результатов SQL всегда один и тот же (с и без SQL):
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
Почему спящий режим генерирует SQL? Различия SQL не имеют никакого смысла и делают запрос медленнее, чем необходимо. Это противоречит FAQ, в котором упоминается, что hql в этом случае является просто ярлыком для трансформатора результата:
session.createQuery( "выберите отличный o from Order o left join fetch o.lineItems" ) список();.
Похоже, вы используете ключевое слово SQL DISTINCT. Конечно, это не SQL, это HQL. В этом случае этот отчет является просто ярлыком для трансформатора результатов. Да, в других случаях отличительная особенность HQL будет переводиться прямо в SQL DISTINCT. Не в этом случае: вы не можете отфильтровывать дубликаты на уровне SQL, сама природа продукта /join запрещает это - вы хотите дублировать или не получаете все необходимые данные.
спасибо