2017-09-11 2 views
1

값 필드가 numeric 인 postgres를 사용하고 있습니다. JOOQ는 이것을 BigDecimal으로 바꿉니다. 내 JOOQ 쿼리는 다음과 같습니다 SumByIdidsum 필드 데이터 클래스가JOOQ 합계 필드 값 : BigDecimal to 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 질문보다 코 틀린 문제의 많은 것 같다.

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

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

Record2.value2()을 사용하는 것입니다.

jOOQ 3.10에서, 당신은 또한 Record2<String, BigDecimal> 같이 탈구 할 수있는 새로운 코 틀린 destructuring 지원을 사용할 수 있습니다은 다음과 같습니다

val (id, sum) = record; 
+0

죄송합니다. 데이터베이스가 postgresql이고'TABLE.VALUE'의 유형이'TableField '이라는 것을 잊어 버렸습니다. 그래서 'Int'로 변환하기가 힘듭니다. – breezymri

+0

@breezymri : 자바의'BigDecimal' 타입은 여러분이 사용할 수있는'intValue()'메소드를 가지고 있습니다. –