【发布时间】:2021-07-26 08:45:22
【问题描述】:
我目前正在尝试将这个函数 https://stackoverflow.com/a/12257917/4375998 引入我的项目中,但遇到了 jooq 生成的函数签名。
生成的代码有这三个签名
public static String udfNaturalsortformat(
Configuration configuration
, String instring
, Integer numberlength
, String sameorderchars
)
public static Field<String> udfNaturalsortformat(
String instring
, Integer numberlength
, String sameorderchars
)
public static Field<String> udfNaturalsortformat(
Field<String> instring
, Field<Integer> numberlength
, Field<String> sameorderchars
)
但它们似乎都不适合我按名称排序表的用例。
目前以以下方式完成:在某些地方生成搜索参数集合,然后将其包含在查询中:
public Collection<? extends SortField<?>> getSortFields(List<Pageable.SortField> sorts) {
if (sorts.isEmpty()) {
return Collections.singletonList(ProjectRepositoryImpl.LAST_ACTIVITY.field("last_activity").desc());
}
List<SortField<?>> sortFields = new ArrayList<>();
for (Pageable.SortField sort : sorts) {
if (sort.getSortDirection() == Pageable.SortDirection.DESC) {
sortFields.add(PROJECT.NAME.desc());
} else {
sortFields.add(PROJECT.NAME.asc());
}
}
return sortFields;
}
最后的查询看起来像这样
Result<Record> queryResults = jooq.select(PROJECT.fields())
.from(PROJECT)
.where(searchCondition)
.orderBy(transformer.getSortFields(pageable.getSorts()))
.limit(pageable.getPageSize())
.offset(pageable.getOffset())
.fetch();
所以我目前尝试做的是将排序字段替换为类似的内容
sortFields.add(udfNaturalsortformat(PROJECT.NAME, 10, ".").desc());
但签名不匹配。
在我的 order by 语句中包含此方法的正确方法是什么?
【问题讨论】: