Java 在CriteriaQuery中正确写入联接
我有三个数据模型:Profile、User和UserGroup。配置文件与用户(创建此配置文件的用户)有@ManyToOne关系,用户与列表有@ManyToMany关系。 我需要获得由用户创建此配置文件所属的相同组的任何用户创建的配置文件。在JPQL中,它看起来是这样的,并且似乎工作正常:Java 在CriteriaQuery中正确写入联接,java,jpa,join,jpql,Java,Jpa,Join,Jpql,我有三个数据模型: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 我需要做的是通过CriteriaQ
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>
CriteriaBuilder=entityManager.getCriteriaBuilder();
CriteriaQuery criteria=builder.createQuery(Profile.class);
Root=标准.from(Profile.class);
Join joinGroup=root.Join(“用户”).Join(“组”);
条件。选择(根)。其中(joinGroup.in(组))
//groups是一个具有列表类型的方法参数
如何在此场景中编写正确的联接?Join joinGroup=root.Join(“user”,JoinType.LEFT)
Join<Profile, Group> joinGroup = root.join("user", JoinType.LEFT)
.join("groups", JoinType.LEFT);
.join(“组”,JoinType.LEFT);
最好在创建条件时使用别名,如
Criteria plan= dbSession.createCriteria(Profile.class,"<aliasname>") .createAlias("<aliasname>.<columnName>", "<aliasname1>")
.createAlias("<aliasname1>.<columnName>", "<aliasname2>") .add(Restrictions.eq("<aliasname2>.cloumn", groups object));
Criteria plan=dbSession.createCriteria(Profile.class)