在非主键列上使用 Hibernate Criteria 进行内部连接

Inner joins using Hibernate Criteria on non-primary key column

我想使用 Hibernate Criteria 语言编写此查询。我是 Hibernate 的新手,无法将此查询转换为 Criteria 形式。我在 SO 上提到了很多可用的答案,但在我的例子中,我在不同的列而不是主键/外键列上使用内部连接。我提到了this,但还是做不对。

select TableA.columnA1, TableA.columnA2, TableA.columnA3, TableB.columnB1, TableC.columnC2 from TableA inner join  TableB 
on 
cast(TableA.columnA3 as Integer) = TableB.columnB2
inner join
TableC
on 
TableB.columnB3 = TableC.columnC1

为了处理连接逻辑,您需要对每个表使用 from,并在 where 谓词中包含 on-clauses 中的所有条件。

这是一个处理父子关系但没有外键关系的 JPA 示例:

EntityManager em = getDb().getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Child> criteria = cb.createQuery(Child.class);
Root<Parent> p = criteria.from(Parent.class);
Root<Child> c = criteria.from(Child.class);
Predicate condition = cb.and(
    cb.equal(c.get(Child_.parentId), p.get(Parent_.id)),
    ...
    );
criteria.where(condition);
criteria.select(c);
criteria.orderBy(cb.asc(c.get(Child_.createDate)));
TypedQuery<Child> q = em.createQuery(criteria).setMaxResults(limit);

此处提供了一个 JPA 示例,因为 Hibernate 标准 API 已弃用,取而代之的是 JPA 标准 API(参见 Legacy Hibernate Criteria Queries)。