我想使用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
答案 0 :(得分:2)
要处理加入逻辑,您将希望对每个表使用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)。