java - 在 CriteriaQuery 中正确编写 JOIN

标签 java jpa join jpql

我有三个数据模型:配置文件、用户和用户组。配置文件与用户(创建此配置文件)有@ManyToOne关系,用户与列表有@ManyToMany关系。 我需要获取由创建此配置文件的用户所在组的任何用户创建的配置文件。在 JPQL 中,它看起来像这样,并且似乎工作正常:

SELECT p FROM Profile p
LEFT JOIN p.user u
LEFT JOIN u.groups g
WHERE g.id in :groups

我需要做的是通过 CriteriaQuery 实现相同的功能。

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Profile> criteria = builder.createQuery(Profile.class);
Root<Profile> root = criteria.from(Profile.class);
Join<Profile, Group> joinGroup = root.join("user").join("groups");

criteria.select(root).where(joinGroup.in(groups))
// groups is a method parameter with a type of List<Group>

在这种情况下如何编写正确的 Join?

最佳答案

Join<Profile, Group> joinGroup = root.join("user", JoinType.LEFT)
    .join("groups", JoinType.LEFT);

关于java - 在 CriteriaQuery 中正确编写 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21451492/

相关文章:

java - gRPC:创建阻塞或 future stub

java - hibernate @OneToMany导致多个选择语句

Java:在构造函数上调用方法

MySQL - 多个内部连接和连接

mysql - mysql连接三个表

java - Azure - HDInsight Hbase 数据插入失败

java - Hibernate 不将实体持久保存到 MySql - Wildfly 10

java - "Hibernate"类映射到底代表什么?

java - @ElementCollection计数频率

mysql - 如何使这个 MYSQL 外连接工作