2014-09-16 2 views
3

MySQL 테이블에서 임의의 레코드 목록을 선택하려고하지만 특정 ENUM 유형에 우선 순위를두고 있습니다. 다음 코드를 작성할 때JOOQ는 orderBy 메소드에서 Field와 SortField를 결합합니까?

select * from table_name where expires <= UNIX_TIMESTAMP()*1000 
order by enum_type desc, rand() limit 500; 

하지만 내 IDE에서 컴파일 오류를 얻을 : 내가 터미널에서 다음 일반 SQL 쿼리를 실행할 때 잘 작동, 이제

private List<FooRecord> getNextRecordsWeighted(Condition condition, int recordLimit) { 
    final long timeNow = System.currentTimeMillis(); 
    return context.selectFrom(TABLE_NAME).where(TABLE_NAME.EXPIRES.lessOrEqual(timeNow)). 
     orderBy(TABLE_NAME.ENUM_TYPE.desc(), DSL.rand()).limit(recordLimit).fetch(); 
} 

무엇 내 IDE 분명히이 작업을 호출 할 수있는 호환 가능한 메서드가 없다는 것입니다. 어떻게 해결할 수 있을까요? 해결 방법이 있습니까?

답변

3

문제는 orderBy() 메서드의 다양한 과부하입니다. 당신은이 :

귀하의 TABLE_NAME.ENUM_TYPE.desc()SortField입니다 DSL.rand()Field 반면. 이 작업을 수행하려면 DSL.rand().asc()으로 전화하여 DSL.rand()SortField으로 만들어야합니다.

나는 이것이 API의 결함 중 하나임을 알고 있으며, 향후 jOOQ 버전에서 수정 될 수 있습니다. 이 픽스를위한 GitHub 문제를 만들었습니다 : #3631

+0

정말 고마워요. 아아, 다른 문제가 발생했습니다. 내 편집 좀 봐 주시겠습니까? – TheShahin

+0

@ TheShahin : 천만에요. 참고 : 스택 오버 플로우가 작동하는 방식은 문제마다 하나의 질문을하는 것입니다. 향후 방문자가 Google을 통해이 질문을 발견했을 때 진행 상황을 훨씬 쉽게 알 수 있습니다. 편집을 다시 삭제하고 새로운 질문에 붙여 넣으십시오. 나는 거기에 (또는 아마도 다른 사람) 대답을 할 것이다 –

+0

주목. 편집을 삭제했습니다. 나는 원시 SQL 문자열을 jOOQ 쿼리에 포함 시켜서이 문제를 해결했다. 그것이 효과가 없지만 작동하지만 마감일로 인해 변경할 시간이 없습니다 :) 다시 한 번 감사드립니다. – TheShahin