mysql - CriteriaQuery order by FIND_IN_SET
问题描述
我正在使用 JPA 规范查询,我们遵循以下通用架构进行查询
@Override
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
// Create a new predicate list
List<Predicate> predicates = new ArrayList<>();
// Add criteria to predicates
for (SearchCriteria criteria : list) {
switch (criteria.getOperation()) {
case EQUAL:
predicates.add((Objects.isNull(criteria.getJoinMap()) || criteria.getJoinMap().isEmpty())
? builder.equal(root.get(criteria.getKey()), criteria.getValue())
: builder.equal(getOrCreateJoins(root, criteria.getJoinMap()).get(criteria.getKey()),
criteria.getValue()));
break;
case MATCH:
predicates.add((Objects.isNull(criteria.getJoinMap()) || criteria.getJoinMap().isEmpty())
? builder.like(builder.lower(root.get(criteria.getKey())),
"%" + criteria.getValue().toString().toLowerCase() + "%")
: builder.like(
builder.lower(getOrCreateJoins(root, criteria.getJoinMap()).get(criteria.getKey())),
"%" + criteria.getValue().toString().toLowerCase() + "%"));
break;
case SORT_ASC:
query.orderBy((Objects.isNull(criteria.getJoinMap()) || criteria.getJoinMap().isEmpty())
? builder.asc(root.get(criteria.getKey()))
: builder.asc(getOrCreateJoins(root, criteria.getJoinMap()).get(criteria.getKey())));
break;
case SORT_DESC:
query.orderBy((Objects.isNull(criteria.getJoinMap()) || criteria.getJoinMap().isEmpty())
? builder.desc(root.get(criteria.getKey()))
: builder.desc(getOrCreateJoins(root, criteria.getJoinMap()).get(criteria.getKey())));
default:
break;
}
}
return isSearchOperationOr ? builder.or(predicates.toArray(new Predicate[0]))
: builder.and(predicates.toArray(new Predicate[0]));
}
在此,我们有正在处理的键和值/值,但我希望在获取结果时,我在 IN Query 中提供的 Id 的顺序是相同的。
已经通过了 mysql 中的 FIND_IN_SET 术语,但知道如何在上面的代码中进行配置吗?
解决方案
推荐阅读
- android - 多次调用Android Vibrator振动功能停止振动
- windows - 无法在您的路径中找到liquidsoap_binary
- ajax - 在所有图像加载之前显示 ajax 调用成功
- python - NLTK WordNetLemmatizer 中的多线程?
- mongodb - 我们如何在 MongoDB shell 中更新数组对象值
- go - http.Server.ListenAndServe 崩溃“逗号太多”仅在 Minikube 上
- wordpress - Wordpress 音频播放器只播放第一个附件
- javascript - 旧 VB .Net 应用程序和 Javascript 事件中的回发
- python - 比较 Pandas 系列和 Python 列表之间的数据
- excel - 如果存在特殊字符,则删除单元格?