Hibernate - нельзя использовать GROUP BY с ORDER BY вместе - PullRequest
1 голос
/ 07 апреля 2011


Это странно ...
У меня есть hql-запрос, который игнорирует GOUP BY, если включено ORDER BY .
он выполнит запрос без сгруппировать по ,
, но если я уберу ордер по , он будет работать нормально

  list = getSession().createQuery(
        "SELECT 
  Brand.name as Brand_name 
, Brand.url as Brand_url 
, Brand.email as Brand_email 
, Brand.brandId as Brand_brandId 
, Brand.description as Brand_description 
FROM com.affiliates.hibernate.Brand Brand  
INNER JOIN Brand.users as users 
WHERE 1=1  
AND users.userId>'0' 
order by  Brand.email ASC 
group by brandId"//this one will be ignored because of the order by
    ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();

sql генерируется:

select
        brand0_.NAME as col_0_0_,
        brand0_.URL as col_1_0_,
        brand0_.EMAIL as col_2_0_,
        brand0_.DESCRIPTION as col_3_0_ 
    from
        BRAND brand0_ 
    inner join
        USERS_BRANDS users1_ 
            on brand0_.BRAND_ID=users1_.BRAND_ID 
    inner join
        USER user2_ 
            on users1_.USER_ID=user2_.USER_ID 
    where
        1=1 
        and user2_.USER_ID>'0' 
    order by
        brand0_.EMAIL ASC limit ?       

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Во-первых, обратите внимание, что BRAND.BRAND_ID был исключен из проекций столбцов в SQL.Вероятно, это также связано с удалением группы.

Во-вторых, обратите внимание, что в запросе не определены агрегатные функции.Группа работает только на агрегаты.Попробуйте добавить статистическую функцию, такую ​​как max, ко всем столбцам.Это может быть причиной проблемы

Наконец, попробуйте полностью указать brandId в HQL, чтобы избежать путаницы:

group by Brand.brandId
0 голосов
/ 17 января 2016

Вы должны применить порядок после группового, но вы написали как

order by  Brand.email ASC 
group by brandId"//this one will be ignored because of the order by
    ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();

Но измените на:

group by brandId"//this one will be ignored because of the order by
    ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
    order by  Brand.email ASC 

Тогда это будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...