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

标签 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

最佳答案

要处理连接逻辑,您需要对每个表使用 from 并将所有来自 where 子句的条件包括在内谓词。

这是一个处理父子关系但没有外键关系的 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)。

关于java - 在非主键列上使用 Hibernate Criteria 进行内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824077/

相关文章:

java - Java 类 Integer 和 Long 的源代码中的 "HD"是什么意思?

java - orientdb:在 OType.LINKLIST 字段上使用 'IN' 将数组传递给查询

java - Spring data JPA,hql查询在选择请求中加入@ManyToMany关系

php - 在选择查询中从两个不同的表中减去两个不同的列总和

java - 如何将数据库查询映射到对象 [在 Java 中]?

hibernate - hibernate中的全局临时表

java - 如何在 SWT 中按列对表进行排序

java - RecyclerView 显示来自 2 种不同布局的数据

java - 除了 click() 和 Submit() 方法之外,还有其他方法可以在 selenium Webdriver 中选择/单击 Web 元素吗?

mysql - 在 SQL 中水平拼接列