处理Kotlin中JPA标准排序的惯用方式

问题描述 投票:0回答:1

我有一个基于CriteriaBuilder的查询,可以通过几个不同的属性对其进行排序。

当前正在以这种方式处理:

when(filters.sortBy) {
    "foo" -> query.orderBy(if(isAsc) cb.asc("bar") else cb.desc("bar"))
    "baz" -> query.orderBy(if(isAsc) cb.asc("quux") else cb.desc("quux"))
}

绝对不是我编写过的最具可读性或可维护性的代码。

[由于Kotlin中没有三元? :运算符,在Kotlin中是否有更好且更惯用的方法?

请注意,我需要排序的某些属性可能是根对象的子属性,因此将其提取到以字符串作为order子句名称的方法中可能并不容易。

jpa kotlin criteria-api
1个回答
0
投票

when是一个表达式,因此您可以将其结果直接用作query.orderBy()中的参数”>

此外,局部功能将有助于消除if-else复制部分

 fun query(...) {
    ...   
    fun sort(name: String) = if (isAsc) cb.asc(name) else cb.desc(name)
    query.orderBy(sort(
            when (filters.sortBy) {
                "foo" -> "bar"
                "baz" -> "quux"
            }
    ))
    ...
 }
© www.soinside.com 2019 - 2024. All rights reserved.