Spring data jpa SpecificationでSubqueryを使用
今週中に、タグでフィルタリングする機能を完成させたいのですが、今はまだ書いていませんが、その過程でspring jpaに対する理解が深まりました.
最初はサブクエリが必要だったので,クエリを学習した.
subquery
subqueryはサブクエリであり、データベースの基本的な操作です.次の例で学習します.
今私达は2枚の表があります
対応するsql文は
参考記事
spring-data subquery within a Specification
最初はサブクエリが必要だったので,クエリを学習した.
subquery
subqueryはサブクエリであり、データベースの基本的な操作です.次の例で学習します.
今私达は2枚の表があります
klass
とcourse
彼らの関系は多対多で、今私达は课程名を通じて授业のクラスを探します(感じが多いのではありませんか?正直に言って、私も感じて、しかし私达の重点はsubqueryの使い方を学ぶことです) //
public List getAll(String courseName) {
return this.klassRepository.findAll((Specification) (root, query, builder) -> {
//
Subquery courseSubquery = query.subquery(Klass.class);
// select * form ... form...
Root courseRoot = query.from(Course.class);
//
Join klassJoin = root.join("klasses");
// select ,where
courseSubquery.select(klassJoin)
.where(builder.equal(courseRoot.get("name"), courseName));
return builder.in(root).value(courseSubquery);
});
}
対応するsql文は
SELECT klass
FROM Klass klass
WHERE klass
IN (
SELECT klassJoin
FROM Course course JOIN course.klasses klassJoin
WHERE couser.name = :courseName
)
参考記事
spring-data subquery within a Specification