У меня есть таблица TABLE, в которой могут быть родители одного типа.В Java ребенок может связаться с родителем, но у родителя нет списка детей.
В MySQL мне удалось создать следующий запрос, который дает мне детей и дочерних элементов родителя, но я 'Я не могу перевести это на JPA Java.
Как я могу перевести этот запрос:
SELECT *
FROM TABLE AS T1
INNER JOIN
(SELECT id FROM TABLE WHERE TABLE.parentId = 966) AS T2
ON T2.id = T1.parentId OR T1.parentId = 966
GROUP BY T1.id
На язык Java, используя Criteria Builder и Criteria Query, я уже пробовал что-то вроде этого:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<TABLE> cq = cb.createQuery(TABLE.class);
Root<TABLE> tABLE= cq.from(TABLE.class);
Predicate result = cb.conjunction();
Join<TABLE, TABLE> TABLEJoin = tABLE.join("parent", JoinType.INNER);
result = cb.and(result, cb.equal(genericLocationJoin.get("parent"), location));
em.createQuery(cq.select(tAble).where(result)).getResultList();
Но это только дает мне непосредственных детей, но не дает мне детей.
Спасибо за вашу помощь.
Сущность:
@Entity
@Table(name = "table")
public final class TABLE {
@Column(nullable = false, unique = true, length = 20)
private String externalId;
@Column(nullable = false, length = 50)
private String name;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "parentId", nullable = true)
private TABLE parent;
}