query.o-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:34:54 25 4
gpt4 key购买 nike

我有一个基于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中是否有更好且更惯用的方式来做到这一点?

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

最佳答案

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"
}
))
...
}

关于jpa - 在Kotlin中处理JPA标准排序的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58373849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com