JOOQ总和字段值:BigDecimal到Int

我使用postgres的数值字段。 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是一个带有idsum字段的数据类:

 data class SumById (val id: String, val sum: Int) 

我可以通过执行.toString().toInt()来获得Int总和。 但是我想知道是否有更好的方法把BigDecimalInt

PS

我想这是一个比JOOQ问题更多的kotlin问题。

就在这里。 刚才重复使用你的列引用:

 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度)。

在3.10中,您也可以使用新的Kotlin解构支持,其中Record2<String, BigDecimal>可以如下解构:

 val (id, sum) = record;