gpt4 book ai didi

java - JPA左/右连接查询

转载 作者:行者123 更新时间:2023-11-30 04:37:32 26 4
gpt4 key购买 nike

我有来自实体 Aa、Bb、Cc 的结构:

  • Aa 有一个 Bb 列表
  • Bb 有抄送列表

-

public class Aa{
@OneToMany
List<Bb> listBb;
}

public class Bb{
@OneToMany
List<Bb> listCc;
}

我想创建一个 JPA Criteria API 查询,通过 id C: 来池 Aa:

public A getAaByCcId(long id) {...}

在 native SQL 中,我会尝试左连接(两次)。如何使用 JPA 执行此操作?

最佳答案

您还可以使用 JPQL 中的联接来完成此操作:

select a from Aa a
inner join a.listBb b
inner join b.listCc c
where c.id = :cId

请注意,此处可以使用内部联接,因为您对 c.id = :cId 有限制,只有 B 和 C 存在时才为 true。但您也可以使用左连接。

编辑:

使用 Criteria 查询,它将如下所示(未经测试):

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Aa> criteria = builder.createQuery(Aa.class);
Root<Aa> a = criteria.from(Aa.class);
CollectionJoin<Aa, Bb> b = a.join(Aa_.listBb);
CollectionJoin<Bb, Cc> c = b.join(Bb_.listCc);
criteria.where(builder.equal(c.get(Cc_.id), cId));
return em.createQuery(criteria).getResultList();

关于java - JPA左/右连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13108382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com