我使用的postgres的值字段为numeric
。 JOOQ将其变为BigDecimal
。我的JOOQ查询是:
val sumField = DSL.sum(TABLE.VALUE)
val query = dsl().select(TABLE.id.`as`("id"), sumField.`as`("sum"))
.from(TABLE)
.groupBy(TABLE.id)
.fetch()
.map{
record -> SumById(
id = record.get("id").toString(),
sum = record.get("sum").toString().toInt()
)
}
其中SumById
是包含id
和sum
字段的数据类:
data class SumById (val id: String, val sum: Int)
我可以通过Int
获得.toString().toInt()
总和。但我想知道是否有更好的方式将BigDecimal
转为Int
。
PS
我想这更像是一个kotlin问题,而不是JOOQ问题。
答案 0 :(得分:0)
是的,有。只需重复使用之前的列引用:
record -> SumById(
id = record.get(TABLE.id.`as`("id")),
sum = record.get(sumField.`as`("sum"))
)
或者,您也可以将它们存储在局部变量中。另一种选择是使用Record2.value1()
和Record2.value2()
record -> SumById(
id = record.value1(),
sum = record.value2()
)
...因为类型信息是由jOOQ API在您的查询中维护的(至少22度)。
在jOOQ 3.10中,您也可以使用新的Kotlin解构支持,其中Record2<String, BigDecimal>
可以按如下方式进行解构:
val (id, sum) = record;
答案 1 :(得分:0)
您可以在源集中创建包org.jooq.impl
,并在其中创建具有整数类型的函数sum
package org.jooq.impl
import org.jooq.AggregateFunction
import org.jooq.Field
public class DSLX {
public AggregateFunction<Integer> sum(Field<Integer> field) {
return new Function("sum", SQLDataType.INTEGER, field);
}
}
因为类Function
具有程序包专用的构造函数。
现在您不需要转换BigDecimal