Spring-data 、Oliver Gierkeの優れたライブラリには、 仕様 (org.springframework.data.jpa.domain.Specification)と呼ばれるものがあります。これを使用すると、検索の条件を絞り込むためにいくつかの述語を生成できます。
誰かが仕様内からサブクエリを使用する例を提供できますか?
私はオブジェクトグラフを持っていますが、検索条件はかなり厄介になる可能性があります。仕様を使用して検索を絞り込むのに役立てたいのですが、サブクエリを使用して、オブジェクトグラフ内の(コレクション内の)サブ要素の一部が検索のニーズを満たしているかどうかを確認する必要があります。
前もって感謝します。
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);
}
}
);
次のjpqlクエリと同等です。
SELECT e FROM Employee e WHERE e IN (
SELECT emp FROM Project p JOIN p.employees emp WHERE p.name = :projectName
)