JOOQ总和字段值:BigDecimal到Int

问题描述:

我使用的postgres的值域为numeric。 JOOQ将其变为BigDecimal。我JOOQ查询:JOOQ总和字段值:BigDecimal到Int

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() 
    ) 
    } 

其中SumByIdidsum字段的数据类:

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

我可以做.toString().toInt()得到Int总和。但我想知道是否有更好的方法将BigDecimal变成Int

PS

我想这是一个多JOOQ问题上科特林问题。

+0

什么是'record.get(字符串)返回的类型' ? – jrtapsell

+0

您可以为“记录”类定义自定义扩展方法。阅读会更好。 –

是的,有。刚刚从早期的重用你的专栏referenes:

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,您可能还可以使用新的科特林解构的支持,其中Record2<String, BigDecimal>可以解构为:

val (id, sum) = record; 
+0

对不起,我忘了提及数据库是postgresql,而'TABLE.VALUE'的类型是'TableField '。这就是为什么我很难将其转换为“Int”。 – breezymri

+0

@breezymri:Java的'BigDecimal'类型有一个你可以使用的'intValue()'方法。 –