我有三个数据模型:配置文件、用户和用户组。配置文件与用户(创建此配置文件)有@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/