我有一个 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对象列表?
我整天都像狗一样工作(尝试“分组依据”和“排序依据”),但我想我一直在咆哮错误的树。
答案 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
我只通过请求狗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