#java #spring-boot #spring-data-jpa #querydsl
#java #весенняя загрузка #spring-data-jpa #querydsl
Вопрос:
У меня есть объект, который является образцом (сильно упрощенным)
class Sample {
List analysis;
}
И анализ содержит значение
class Analysis {
Integer value;
}
Образец содержит N таких образцов, и не все из них имеют значения. В Querydsl я хочу упорядочить результаты по проценту анализа, который имеет любое значение.
Я пробовал это, но не похоже, что он подсчитывает количество значений.
query.orderBy(
new OrderSpecifier(
pRequest.getOrder(),
Expressions.asNumber(qSample.analysis.any().value.isNotNull().count().divide(qSample.analysis.size()) )
)
);
Ответ №1:
Попробуйте:
query.orderBy(
pRequest.getOrder(),
Expressions.asNumber(
qSample.analysis.any().value.isNotNull().count().divide(qSample.analysis.size())).asc()
);
Комментарии:
1. Это дает мне
Request processing failed; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found 'is' near line 5, column 38
2. Похоже, что Hibernate не поддерживает подзапросы, введенные с помощью вызовов any() и size() в предложении order by. Я предлагаю вам переписать их в простые подзапросы.