【发布时间】:2020-04-29 09:28:00
【问题描述】:
我正在使用 JPA 规范编写代码:
片段1:
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 中的规范?
但是我应该如何将它添加到我的规范中呢?
【问题讨论】:
-
@SimonMartinelli,我进行了调查,但无法弄清楚
criteriaBuilder.equal我应该使用criteriaQuery.orderBy申请什么。