Применить заказ по в JPA Технические характеристики - PullRequest
0 голосов
/ 29 апреля 2020

Я пишу код с помощью JPA Технические характеристики:

Snippet1:

Specification.where(withTopics())
        .and(withCar())
        .and(withInsurance())
        // how to add order by

Где каждый метод условия имеет структуру, такую ​​как:

public static Specification<Page> withCar(String type) {
    return new Specification<Page>() {
      @Override
      public Predicate toPredicate(Root<Page> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
        return // logic return cb
      }
    };
}

Я хочу добавьте заказ по условиям.

Я написал заказ по выражениям:

public static Specification<Page> orderByConditions(String input1, String input2) {
    return new Specification<Page>() {
      @Override
      public Predicate toPredicate(Root<Page> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
        Expression<Object> cases = cb.selectCase()
                .when(cb.equal(cb.lower(root.get("carn_ame")), inputTopic.toLowerCase()), 1)
                .when(cb.like(cb.lower(root.get("insurance_name")), "%" + inputTitle.toLowerCase() + "%"), 2)
                .otherwise(3);
        Order order = cb.desc(cases);
        cb.createQuery().orderBy(order);
        // what to return
      }
    }
}

Что я должен вернуть из моего orderByConditions(), чтобы я мог применить его к своим спецификациям в Snippet1 ?

Но как мне добавить его в мои спецификации?

1 Ответ

1 голос
/ 29 апреля 2020

Если у вас нет условия / предиката, вы можете вернуть «без условия» 1 = 1

return cb.equal(cb.literal(1), 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...