在非主键列

时间:2016-06-15 00:02:39

标签: java sql hibernate hibernate-criteria

我想使用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

1 个答案:

答案 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)。