2011-02-09 21 views
1

我目前正在创建一个功能,如'其他喜欢此功能的人也喜欢'。HQL:如何在使用where-in-subselect构造获取完整行时维护排序顺序?

有问题的HQL语句返回一个产品ID列表(按照两个产品之间共享'喜欢'的数量排序)。但结果并不明显 - 剥离到非常基础,查询看起来像这样。 (请注意:这不是原来的查询,而不是一个简单的例子给你的我在做什么的想法)

select prd2.id from UserLike ul2 
join ul2.product prd2 
where ul.userId in (
    select ul.userId from UserLike ul 
    join ul.product prd 
    where prd.id=:productId 
) 
group by prd2.id 
order by count(prd2.id) desc 

从那里开始,有以检索每个完整的行/实体的普通模式产品?

在SQL中,我将使用上面的查询作为FROM中的子查询并返回到产品表。

由于HQL不内,我不认为还有另一种方式,而不是包裹

from product p where p.id in (SUBSELECT_AS_ABOVE) 

但进入分拣支持子。 :(

也许这听起来有点不可思议,但我认为这是一个常见的情况 - 那么,有没有这方面的任何共同的解决方法

非常感谢提前和问候, 彼得

回答

1

您可以分两步进行: 1.获取ID(您已经完成); 2.通过ID列表获取所有产品 您可以使用Expression.In(“Id”,idList)其中idList是从第一查询中得到的IList结果

另外,如果只有p尽可能地尝试做所有事情,不要使用HQL,但要有标准和限制。

+0

感谢您的回复。如果我错了,请纠正我,但不是Expression.in与上面声明中的p.id(...)中的位置相同,即丢弃ID的顺序? – PeterP 2011-02-09 09:11:10

相关问题