Spring JPAを使用してページングQueryDSLクエリを実行する方法
-
12-12-2019 - |
質問
QueryDSLは、OrderSpecifier
またはasc()
を呼び出すことによって、任意のフィールドに対して簡単に取得できるdesc()
インタフェースとインスタンスを定義します。Spring Data JPAのQueryDslPredicateExecutor
インタフェースでも、ParametersとしてfindAll()
を撮影するOrderSpecifier
メソッドがあります。
org.springframework.data.domain.PageRequest
は、QueryDSLについては何も知らず、クエリソート順を定義するための独自の方法、つまりorg.springframework.data.domain.Sort
があります。それは、それらがSafe Cypey etcではなく、org.springframework.data.domain.Sort.Order
sのような多数のOrderSpecifier
を含むことができます。
だから、ソートを使用するページングクエリを作成したい場合は、それを定義するためのQueryDSLの使用方法はありませんか?
解決
別の方法が見つからない場合は、このように機能するはずです
private Sort sortBy(Path<?> path) {
return new Sort(Sort.Direction.ASC, path.getMetadata().getExpression().toString());
}
. 他のヒント
私はそれがしばらく経っていることを知っていて、これがオペの時点で利用可能であるとはかなりわからないが、 qpagerequest QPAGEREQUEST QueryDSLを介したソートをSpring Data JPAクエリDSLに追加することができます...
これは、QueryDSLを使用してSort
オブジェクトを構築するためのはるかに簡単な方法です。
new QSort(user.manager.firstname.asc())
.
その後、のようにPageRequest
で使用できます。
new PageRequest(0, 10, new QSort(user.manager.firstname.asc()))
. getExpression()
メソッドは削除されました。QPost.post.period.periCode
を集める方法。
private String resolveOrderPath(Path<?> path) {
StringBuilder stringBuffer = new StringBuilder(path.getMetadata().getName());
path = path.getMetadata().getParent();
while(!path.getMetadata().isRoot()) {
stringBuffer.insert(0, path.getMetadata().getName() + ".");
path = path.getMetadata().getParent();
}
return stringBuffer.toString();
}
Path<?> path = QPost.post.period.periCode;
String propertyPath = resolveOrderPath(path);
Sort sort = new Sort("asc".equals(sSortDir0) ? Sort.Direction.ASC : Sort.Direction.DESC, propertyPath);
.