كيفية القيام استعلام كيريدسل مقسم إلى صفحات مع الربيع جبا?

StackOverflow https://stackoverflow.com//questions/11673213

سؤال

كيريدسل يعرف OrderSpecifier واجهة ومثيل لذلك يمكن الحصول عليها بسهولة لأي حقل عن طريق الاتصال asc() أو desc().ال QueryDslPredicateExecutor واجهة الربيع البيانات جبا حتى لديه findAll() الطريقة التي تأخذ OrderSpecifierق كمعلمات.

org.springframework.data.domain.PageRequest ومع ذلك لا يعرف أي شيء عن كيريدل ولها طريقتها الخاصة لتحديد ترتيب الاستعلام ، وهي org.springframework.data.domain.Sort.يمكن أن تحتوي على عدد من org.springframework.data.domain.Sort.Orderالصورة التي هي الكثير مثل OrderSpecifierس, إلا أنها ليست آمنة من النوع وما إلى ذلك.

لذلك ، إذا كنت تريد أن تجعل الاستعلام مقسم إلى صفحات الذي يستخدم الفرز ، هل هناك حقا أي وسيلة لاستخدام كيريدل لتحديد ذلك?

هل كانت مفيدة؟

المحلول

يجب أن تعمل على هذا النحو إذا لم تتمكن من العثور على طريقة أخرى

private Sort sortBy(Path<?> path) {
    return new Sort(Sort.Direction.ASC, path.getMetadata().getExpression().toString());
}

نصائح أخرى

وأنا أعلم أنه كان بعض الوقت وأنا لست متأكدا من أن هذا كان متاحا في وقت البروتوكول الاختياري ولكن هناك الآن كيوباجيريكويست كائن قدم الذي يسمح للفرز عبر كيريدسل لتضاف إلى بيانات الربيع جبا الاستعلام دسل...

هنا هو وسيلة أبسط من ذلك بكثير لبناء Sort كائن باستخدام كيريدسل:

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

ثم يمكنك استخدامه في PageRequest مثل ذلك:

new PageRequest(0, 10, new QSort(user.manager.firstname.asc()))

ال 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top