Можете ли вы заказать результаты hql на основе соответствующих ограничений? - PullRequest
2 голосов
/ 06 февраля 2009

У меня есть объект Dog , который содержит набор DogMetadata .

Каждый DogMetadata имеет два значения: String (" desc ") и int (" rank ").

Описания собак имеют разные рейтинги, такие как: «маленький» - 5, «пушистый» - 2, «дружелюбный» - 9, «далматин» - 11, «дурак» - 22

Мне нужно искать собак на основе любых их значений desc (например, найти "пушистых" ИЛИ "маленьких" собак).

Этот запрос возвращает подходящих собак, но они не в любом порядке.

select distinct Dog as d
left join d.dogMetadata as dMeta
where ( (dMeta.desc = 'furry') OR (dMeta.desc = 'small') )

Как упорядочить список подходящих объектов Dog по суммарным значениям ранга любых подходящих DogMetadatas?

Я весь день работал как собака (пробовал «Группировать по» и «Заказывать по»), но думаю, что я лаю не на том дереве.

Ответы [ 2 ]

1 голос
/ 06 февраля 2009

Этот запрос не будет работать:

select d from Dog as d
left join fetch d.dogMetadata as dMeta
where ( (dMeta.desc = 'furry') OR (dMeta.desc = 'small') )
group by d
order by sum(dMeta.rank) desc

Из-за этой ошибки: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1615?focusedCommentId=24530#action_24530

Я обошел это ограничение, только запросив идентификаторы собак:

select d.id from Dog as d
left join fetch d.dogMetadata as dMeta
where ( (dMeta.desc = 'furry') OR (dMeta.desc = 'small') )
group by d.id
order by sum(dMeta.rank) desc
0 голосов
/ 06 февраля 2009

Просто из головы (без фактической проверки в HQL)

from Dog d where d.dogMetadata.desc in ('furry','small','whatever') order by d.dogMetadata.rank 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...