2017-09-11 4 views
1

私は値フィールドがnumericであるpostgresを使用しています。 JOOQはそれをBigDecimalに変えます。マイJOOQクエリは次のとおりです。SumByIdidsumフィールドを持つデータのクラスがある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() 
    ) 
    } 

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

私は.toString().toInt()をすることによってInt合計を得ることができます。しかし、BigDecimalIntにするより良い方法があるかどうか疑問に思っていました。

PS

私は、これはJOOQの質問よりもkotlin質問の詳細ですね。

+0

タイプは 'record.get(文字列)'によって返される何? – jrtapsell

+0

"レコード"クラスのカスタム拡張メソッドを定義することができます。読むのがよかったです。 –

答えて

0

はい、あります。

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

また、それらをローカル変数に保存することもできます。別のオプションは、型情報は(少なくとも、22度まで)クエリ全体でjOOQ APIによって維持されているよう... Record2.value1()Record2.value2()

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

を使用することです。 jOOQ 3.10で

、あなたはまた、次のようにRecord2<String, BigDecimal>が非構造することができますサポートを構造化代入新しいKotlinを、使用することができる場合があります

val (id, sum) = record; 
+0

私はデータベースがpostgresqlであり、 'TABLE.VALUE'の型が' TableField 'であることを忘れていました。だから、私はそれを 'Int'に変換するのが難しいです。 – breezymri

+0

@breezymri:Javaの 'BigDecimal'型には、あなたが使うことができる' intValue() 'メソッドがあります。 –

関連する問題