jooq

2013-02-19 5 views
6

에 selectCount의 값을 가져 I는 다음과 같습니다 몇 가지 코드가 있습니다jooq

Record record = jooq 
    .selectCount() 
    .from(USERS) 
    .fetchOne(); 

현재 내가 뭘을 개수 얻기 위해 다음

Integer count = (Integer) record.getValue(0); 

을하지만이 보인다 더 나은 해결책이되어야합니다. (그것은 타입 안전합니다 ... 그게 바로 jooq 사용의 요점입니다). 어떤 제안?

답변

6

불행히도이 특정 쿼리의 경우 형식적으로 count() 값을 가져 오는 "더 좋은"방법은 많지 않습니다. 당신이 무엇을 할 수 있는지, 형식 안전성을 추가, 이것이다 :

문제는 투사에 대한 형식 정보의 대부분이 fetch() 방법은 시간에 의해, 자바 컴파일러에 "손실"된 것입니다
Field<Integer> f = count(); 
Integer count = jooq. 
    .select(f) // Or selectCount(). Replaced it to illustrate the case 
    .from(USERS) 
    .fetchOne(f); 

"도달했다". ResultQuery.fetchXXX() 메소드가 SELECT 절에서이를 복구 할 수있는 방법은 없습니다.

jOOQ 사용자 그룹에서 일부 사용자는 fetch() 메쏘드로 투영을 전적으로, C#의 LINQ 또는 Scala의 SLICK로 옮기라고했습니다. 이렇게하면 더 진보 된 SELECT 문을 매우 복잡하게 만들 수 있습니다. more elaborate explanation is documented here.

jOOQ 3.0에서는 추가 레코드 수준 유형 안전성이 도입되었습니다. 따라서 jOOQ 3.3에서는 (#2246으로 등록 된) 단일 값을 가져올 수 있습니다.

<T> T fetchValue(Select<Record1<T>> select);