2009-06-09 4 views
-2

У меня есть следующий запрос, написанный в HQL для Hibernate.HQL Порядок запроса по заданию запроса

==================================================================================================================================== ==========================

select new map(ret.retailerDesc as ret_name, ret.id.retailerId as ret_id, 
       ret.id.serviceId as service_id, 

(select count(distinct i.inspectionId) as inspections from Inspection i 
inner join i.clgCodeStatus c 
inner join c.retailerOrderses r 
inner join r.cusRetailer cr 
inner join i.inspectionMission m where ret.id = cr.id ) as inspections , 

(select count(distinct i.inspectionId) as inspections from Inspection i 
inner join i.clgCodeStatus c 
inner join c.retailerOrderses r 
inner join r.cusRetailer cr 
inner join i.inspectionMission m 
where ret.id = cr.id and i.inspectionResult = '1' ) as match, 

(select count(distinct i.inspectionId) as inspections from Inspection i 
inner join i.clgCodeStatus c 
inner join c.retailerOrderses r 
inner join r.cusRetailer cr 
inner join i.inspectionMission m 
where ret.id = cr.id and i.inspectionResult = '0' ) as mismatch ) 

from CusRetailer ret order by inspections desc 

================= ================================================== ====

Когда над запросом выполняет это дает следующее сообщение об ошибке:

ERROR: column "inspections" does not exist 

он дает эту ошибку для «порядка инспекциями DESC». Если я удалю, что он работает нормально.

Может ли кто-нибудь помочь мне решить эту проблему?

Спасибо.

+0

Здравствуйте, Можете ли вы показать SQL, что Hibernate генерирует для этого HQL запросов (вы можете сделать гибернации Распечатайте это, установив show_sql свойство верно). Из-за ошибки это не похоже, что Hibernate жалуется, но ваша база данных. Cheers –

ответ

0

Я решил его использовать «order by col_1_0_» в предыдущем запросе .. потому что hibernate создает столбец с именами col_0_0_, col_1_0_, col_2_0_ и т. Д., Поэтому, если вам просто нужно знать порядок вашего столбца и добавить его в заказывайте соответственно.

Спасибо.

amar4kintu

+1

Вы уверены, что это хорошее «решение»? Если вы добавите столбец в начало запроса (или если какое-либо другое изменение заставляет спящий режим переупорядочивать столбцы каким-то образом), ваш заказ будет указывать на неправильный столбец. [Это та же концепция, которая нарушает людей, использующих порядковое положение (например, «ORDER BY 1»)] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/06/bad-habits-to-kick- порядка по-ordinal.aspx). Конечно, спящий во всей красе имеет лучшее решение, чем этот хак. Я предпочитаю предложение Гарета, если это не так. –

2

Это может быть случай, что вам нужно повторить выражение для inspections

...from CusRetailer ret order by count(distinct i.inspectionId) 

Может быть, HQL не поддерживает выражения в предложении order by, вам, возможно, придется использовать п SQL запрос вместо.