Ответ 1
Если JPQL, который вы показали, работает, то я предположим, что ваш ParentEntity
содержит ссылку на своего родителя (в форме поля parent
типа ParentEntity
). Поэтому что-то вроде этого должно работать:
Path<Long> parentId = root.get(Entity_.parent).get(ParentEntity_.parent)
.get(ParentEntity_.id);
Predicate whereParentId = builder.equal(parentId, selectedParent.getId());
Я сделал аналогичную вещь, но для одной сущности (Customer
является дочерней и родительской сущностью в одно и то же время и ссылается на ее родительское поле в поле parent
типа Customer
), и что-то вроде этого отлично справляется:
query.select(customer)
.where(criteriaBuilder.equal(
customer.get("parent").get("parent").get("id"),
criteriaBuilder.parameter(int.class, "parentId")));
List<Customer> customers = em.createQuery(query)
.setParameter("parentId", john.getId()).getResultList();