Если 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();