Valor de campo de sum de JOOQ: BigDecimal a Int

Estoy usando postgres con un campo de valor que es numeric . JOOQ lo convierte en BigDecimal . Mi consulta JOOQ es:

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

donde SumById es una class de datos con campos id y sum :

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

Puedo get la sum Int haciendo .toString().toInt() . Pero me preguntaba si hay una mejor manera de convertir BigDecimal en Int .

PD

Supongo que esto es más una pregunta kotlin que una pregunta JOOQ.

Sí hay. Solo reutiliza los referenes de tu columna de antes:

 record -> SumById( id = record.get(TABLE.id.`as`("id")), sum = record.get(sumField.`as`("sum")) ) 

Alternativamente, puede almacenar esos en variables locales también. Otra opción es usar Record2.value1() y Record2.value2()

 record -> SumById( id = record.value1(), sum = record.value2() ) 

… ya que la API de jOOQ mantiene la información de tipo en toda su consulta (hasta un máximo de 22, como mínimo).

En jOOQ 3.10, también es posible que pueda utilizar el nuevo soporte de desestructuración de Kotlin, donde un Record2<String, BigDecimal> se puede desestructurar de la siguiente manera:

 val (id, sum) = record; 
  • Cómo llamar a una function de postgres con una matriz de tipo compuesto