【发布时间】:2014-02-22 11:03:37
【问题描述】:
我有三个数据模型:Profile、User 和 UserGroup。配置文件与用户(创建此配置文件)具有@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?
【问题讨论】: