你能根据匹配限制订购hql结果吗?

时间:2009-02-05 22:09:39

标签: hibernate hql

我有一个 Dog 对象,其中包含一组 DogMetadata

每个DogMetadata都有两个值:String(“ desc ”)和int(“ rank ”)。

狗的描述有不同的排名,如:“小”是5,“毛茸茸”是2,“友好”是9,“dalmation”是11,“mutt”是22。

我需要根据任何他们的desc值来搜索狗(例如,找到“毛茸茸”或“小”狗)。

此查询返回匹配的狗,但它们不是任何顺序。

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

如何按任何匹配的DogMetadatas的总“rank”值排序匹配的Dog对象列表?

我整天都像狗一样工作(尝试“分组依据”和“排序依据”),但我想我一直在咆哮错误的树。

2 个答案:

答案 0 :(得分:1)

此查询无效:

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

我只通过请求狗ID来解决这个限制:

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

答案 1 :(得分:0)

从我的头脑中开始(没有在HQL中实际验证它)

from Dog d where d.dogMetadata.desc in ('furry','small','whatever') order by d.dogMetadata.rank