В настоящее время я создаю функцию, подобную «другим людям, которым это тоже нравится».
Соответствующий оператор HQL возвращает список идентификаторов продуктов (упорядоченный по количеству общих «лайков» между двумя продуктами). Но результат не внятный - если разобраться до самых основ, запрос выглядит примерно так. (Обратите внимание: это не оригинальный запрос, а упрощенный пример, чтобы дать вам представление о том, что я делаю)
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, я не думаю, что есть другой способ, кроме как обернуть
from product p where p.id in (SUBSELECT_AS_ABOVE)
но идет сортировка. (
Может быть, это звучит немного странно, но я думаю, что это общий случай использования - есть ли какие-нибудь общие обходные пути для этого?
Большое спасибо заранее и наилучшими пожеланиями,
Peter