Фон
У меня есть два объекта, сохраненных с помощью Hibernate. Продукт и голосование.
Объект Product содержит список голосов, например
public class Product {
@javax.persistence.Id
@javax.persistence.GeneratedValue
public Long id;
String name;
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
List<Vote> votes;
}
объект голосования просто содержит оценку и двунаправленную ссылку на товар.
public class Vote {
@javax.persistence.Id
@javax.persistence.GeneratedValue
public Long id;
Short score;
@ManyToOne
Product product;
}
Это отлично работает, и в моей базе данных я вижу продукты и голоса, как и ожидалось.
Теперь я хочу написать JPQL-запрос, чтобы упорядочить продукты в порядке наибольшего среднего числа голосов.
Я добился этого с помощью простого SQL следующим образом
select p.name
from product p
order by (select avg(score) from vote v where p.id = v.product_id) desc;
Вопрос
Я не могу заставить это работать в моем запросе JPQL. Я просто получаю сообщение об ошибке "unexpected AST node".
JPQL, который я использую, -
select p from Product p
order by (select avg(score) from Vote v where p.id = v.product) desc
JPQL не поддерживает внутренние операторы выбора?