Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在CriteriaQuery中正确写入联接_Java_Jpa_Join_Jpql - Fatal编程技术网

Java 在CriteriaQuery中正确写入联接

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

我有三个数据模型: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>
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)