質問

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.Ordersのような多数の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);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top