Как мы можем добиться динамической сортировки c, используя спецификацию jpa? - PullRequest
0 голосов
/ 28 января 2020
SELECT r.restaurant_id
    FROM restaurant r
    INNER JOIN location ln
    ON r.location_id = ln.location_id
    ORDER BY r.name, ln.name 

Я могу предсказать вышеуказанный запрос, используя спецификацию JPA. Но столкнулись с проблемами при заказе. Я передаю значение с помощью карты. Используя searchfilter Я жду значения, searchFIlter.get("sort") --- здесь я должен добавить комбинацию для заказа по.

Сортировка будет основываться на одном параметре, нескольких параметрах. Что бы ни прошел пользователь.

Как мы можем достичь этого?

public List<restaant> findByCriteria(Map<String,String> searchFilter){

            public Predicate toPredicate(Root<restarant> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> predicates = new ArrayList<>();
                if(searchFilter.get("restarant")!=null) {
                    predicates.add(criteriaBuilder.and(criteriaBuilder.equal(root.get("restarantName"), employeeName)));
                }

                query.orderBy(criteriaBuilder.asc(root.get("sort")));           // how to make it  dynamic??Since root.get will not accept joined column...Is there any way to sort based on User requirement may be single sort may be multiple sort...may be from different table?
                return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
            }



        });
    }

PS: Код - это просто идея. Не фактическая. Для меня все мои логи c работают, кроме порядка, просто нужны хорошие идеи для заказа. Даже я пытался использовать Sort.by("sort"); это бесполезно.

...