2013-03-07 49 views
5

我一直在谷歌搜索,但不明白调用javax.persistence.criteria.Subquery和Criteria API相关的方法的结果。条件API相关

http://www.objectdb.com/api/java/jpa/criteria/Subquery/correlate_CollectionJoin_

这是从书临JPA2掌握Java持久性API。

在创建此查询的标准API查询定义,我们必须 相关项目的员工属性,然后将其加入到 直接报告,以计算平均工资。这 例子也表明,为了做一个类型比较多态的使用路径 接口类型()方法:

CriteriaQuery<Project> c = cb.createQuery(Project.class); 
Root<Project> project = c.from(Project.class); 
Join<Project,Employee> emp = project.join("employees"); 
Subquery<Number> sq = c.subquery(Number.class); 
Join<Project,Employee> sqEmp = sq.correlate(emp); 
Join<Employee,Employee> directs = sqEmp.join("directs"); 
c.select(project) 
.where(cb.equal(project.type(), DesignProject.class), 
     cb.isNotEmpty(emp.<Collection>get("directs")), 
     cb.ge(sq, cb.parameter(Number.class, "value"))); 

这是什么线路呢?
加入sqEmp = sq.correlate(emp);

回答

7

它使您可以访问由主查询引用的员工,以便您可以在子查询中使用它及其表格

+0

谢谢。所以它把这些问题粘在一起了?跳过上面提到的线会产生什么后果? – pethel 2013-03-08 08:24:15

+1

您不能访问'emp'连接对象中的员工。因此,你不能在你的子查询'sq'中使用'emp',在''Employee_.directs'集合中进行连接。 – mika 2016-01-06 08:26:32