【发布时间】:2019-01-31 11:00:52
【问题描述】:
我有一个表 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;
}
【问题讨论】:
-
发布您的实体。