Как получить дочерние категории при помощи Criteria?
Существует сущность Category, описанная следующим образом:

Эта сущность описывает категории товаров для сущности Gift. В данный момент для получения всех gift'ов с определенной категории я использую следующий предикат в Criteria:
builder.equal(gift.get("category"), filter.getCategory());
Но соль в том, что мне необходимо получить не только список gift'ов данной категории, но и всех её дочерних категории. В голову приходит следующая конструкция:
gift.get("category").in(values);
Вопрос: как вместо values получить массив всех дочерних категории, включая основную категорию?
Ответы (1 шт):
Автор решения: Владислав
→ Ссылка
Проблема решена следующим образом:
String subQuery = """
WITH RECURSIVE temp1(id, parent_id) as (
SELECT t1.id, t1.parent FROM category as t1 WHERE id = ?
UNION
SELECT t2.id, t2.parent FROM category as t2 INNER JOIN temp1 ON(temp1.parent_id = t2.id))
SELECT id FROM temp1
""";
List<Long> categories = entityManager.createNativeQuery(subQuery, List.class)
.setParameter(1, filter.getCategory().getId())
.getResultList();
predicates.add(gift.get("category").get("id").in(categories));
Справедливо для Postgres