Joh*_*ian 16 spring subquery criteria-api spring-data
Spring数据,Oliver Gierke的优秀库,有一个叫做规范(org.springframework.data.jpa.domain.Specification)的东西.有了它,您可以生成多个谓词来缩小搜索条件.
有人可以提供在规范中使用子查询的示例吗?
我有一个对象图,搜索条件可能非常多毛.我想使用规范来帮助缩小搜索范围,但我需要使用子查询来查看对象图中的某些子元素(在集合中)是否满足我的搜索需求.
提前致谢.
Pie*_*ter 28
String projectName = "project1";
List<Employee> result = employeeRepository.findAll(
new Specification<Employee>() {
@Override
public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Subquery<Employee> sq = query.subquery(Employee.class);
Root<Project> project = sq.from(Project.class);
Join<Project, Employee> sqEmp = project.join("employees");
sq.select(sqEmp).where(cb.equal(project.get("name"),
cb.parameter(String.class, projectName)));
return cb.in(root).value(sq);
}
}
);
Run Code Online (Sandbox Code Playgroud)
相当于以下jpql查询:
SELECT e FROM Employee e WHERE e IN (
SELECT emp FROM Project p JOIN p.employees emp WHERE p.name = :projectName
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19949 次 |
最近记录: |