我有一个对象狗,它包含一组DogMetadata。
每个DogMetadata有两个值:一个字符串("desc")和一个int (“秩”)。
对狗的描述有不同的排名,如:“小”为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') )如何根据任何匹配的DogMetadatas的“秩”值排序匹配的Dog对象的列表?
我已经像狗一样工作了一整天(试着“按组”和“按顺序”),但我想我已经把树弄错了。
发布于 2009-02-06 17:52:49
此查询不起作用:
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因为这个bug:http://opensource.atlassian.com/projects/hibernate/browse/HHH-1615?focusedCommentId=24530#action_24530
我通过只请求Dog 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发布于 2009-02-05 23:34:39
只是从我的头顶(实际上没有在HQL验证它)
from Dog d where d.dogMetadata.desc in ('furry','small','whatever') order by d.dogMetadata.rank https://stackoverflow.com/questions/518197
复制相似问题