[英]jooq use custom function in order by statement
我目前正在嘗試將此 function https://stackoverflow.com/a/12257917/4375998引入我的項目,但與 ZC1C4252684E68385D1AB4Aq7 生成的簽名斗爭。
生成的代碼有這三個簽名
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 語句中包含此方法的正確方法是什么?
正如您在生成的方法的簽名中看到的那樣:
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
)
它僅覆蓋所有 java 簡單對象(第一個)或 Field<?> 引用(第二個)。
由於您使用PROJECT.NAME
作為第一個參數,您可能會使用第二個生成的方法,但是您必須傳遞其他 arguments 所有 Field<?> 類型。 所以試試 DSL.val 或 DSL.inline,這是一種將常量值作為字段傳遞的方法:
udfNaturalsortformat(Staff.STAFF.ACQUIRED_COMPANY, DSL.val(10), DSL.val(".")).desc();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.