使用 JPA 条件联接没有关系的表

2022-09-03 17:21:24

我有两个没有模型关系的表:

包含列的表:comm

name
date
code

包含列的表:persondesc

code
description

两个表之间的关系是多对一(许多通信到一个人描述):

com.code = persondesc.code

这两个表是用注释映射的,但我没有声明关系。

我试图的是选择按 排序的表。commpersondesc.description

我该如何做这个JPA和休眠?


答案 1

因此,如果您的类没有“关系”,那么您可以执行如下查询:

SELECT a FROM A a
CROSS JOIN B b
WHERE a.someField = b.otherField
ORDER BY b.anotherField

这可以使用JPA标准来实现,例如

CriteriaBuilder cb = emf.getCriteriaBuilder();
CriteriaQuery<A> query = cb.createQuery(A.class);
Root<A> aRoot = query.from(A.class);
Root<B> bRoot = query.from(B.class);
aRoot.alias("a");
bRoot.alias("b");

query.select(aRoot)
  .where(cb.equal(aRoot.get(A_.someField), bRoot.get(B_.otherField))
  .orderBy(cb.asc(bRoot.get(B_.anotherField)));

...或者只是重新设计你的类,帮你的开发人员一个忙。


答案 2

Hibernate 5.1 为 JPQL 在不相关的实体上引入了显式连接。所以现在你可以写一个类似的原生SQL:JOIN

List<Comm> results = entityManager
  .createQuery("""SELECT c FROM Comm c
    JOIN PersonDesc pd ON c.code = pd.code
    ORDER BY pd.description""", Comm.class)
  .getResultList();

单击此处查看更详细的示例。


推荐