7

QueryDSLは、またはOrderSpecifierを呼び出すことにより、任意のフィールドで簡単に取得できるインターフェースとインスタンスを定義します。Spring Data JPAのインターフェースには、パラメーターとしてsをとるメソッドもあります。asc()desc()QueryDslPredicateExecutorfindAll()OrderSpecifier

org.springframework.data.domain.PageRequestただし、QueryDSLについては何も知らず、クエリの並べ替え順序を定義する独自の方法がありますorg.springframework.data.domain.Sort。型安全性などではないことを除けば、sにorg.springframework.data.domain.Sort.Orderよく似た多数のsを含めることができます。OrderSpecifier

それで、ソートを使用するページクエリを作成したい場合、それを定義するためにQueryDSLを使用する方法は本当にありませんか?

4

4 に答える 4

9

しばらく経ちましたが、これがOPの時点で利用可能であったかどうかはわかりませんが、 QueryDSLを介した並べ替えをSpring Data jpaQueryDSLに追加できるQPageRequestオブジェクトが導入されました...

于 2015-04-23T15:58:08.163 に答える
7

Sortこれは、 QueryDSLを使用してオブジェクトを構築するためのはるかに簡単な方法です。

new QSort(user.manager.firstname.asc())

PageRequest次に、次のように使用できます。

new PageRequest(0, 10, new QSort(user.manager.firstname.asc()))
于 2016-04-15T17:24:02.843 に答える
6

別の方法が見つからない場合は、このように機能するはずです

private Sort sortBy(Path<?> path) {
    return new Sort(Sort.Direction.ASC, path.getMetadata().getExpression().toString());
}
于 2012-07-27T14:57:43.067 に答える
1

getExpression()メソッドが削除され、トラバーサルQPost.post.period.periCode必要な類似の式があり、式の完全な名前がないと何もできなかったため、を収集period.periCodeして完全に機能するメソッドを作成しましたQPost.post

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);
于 2015-01-13T14:21:55.000 に答える