Как получить все значения таблицы, отсортировав по количеству записей в связанной таблице через спецификации?
Есть две таблицы, эмейлы и рассылки. Связанные один ко многим. В представлении джавы у эмейла есть поле Collection<Рассылки>. Через Specification мне нужно получить все эмейлы у которых количество рассылок не больше какого то числа, которое приходит в метод. То есть мне нужно сначала посчитать сколько рассылок у каждого эмейла, сравнить, а после вывести нужные.
private static Specification<Email> isCountSendLessThan(Long count){
return (root, query, criteriaBuilder) -> criteriaBuilder.lessThanOrEqualTo(criteriaBuilder.count(root.get("mailing")),count);
}
Пытаюсь сделать так, но у меня не выходит
Ответы (1 шт):
Автор решения: Без опасности
→ Ссылка
Решение:
return (root, query, criteriaBuilder) -> {
Subquery<Long> sq = query.subquery(Long.class);
Root<Email> sqr = sq.from(Email.class);
Predicate sqIdEq = criteriaBuilder.equal(sqr.get("id"), root.get("id"));
Join<Object, Object> mailingRoot = sqr.join("mailing");
sq.select(criteriaBuilder.count(mailingRoot)).where(sqIdEq);
return criteriaBuilder.lessThanOrEqualTo(sq, count);
};