JOOQ在orderBy方法中结合Field和SortField?

时间:2014-09-16 10:57:34

标签: java mysql sql-order-by jooq

我试图从MySQL表中选择一个随机记录列表,但优先考虑某些ENUM类型。当我在终端中运行以下纯SQL查询时,它工作正常:

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

但是在编写以下代码时,我的IDE遇到了编译错误:

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说的是显然没有可以调用的兼容方法。我该如何解决这个问题?有解决方法吗?

1 个答案:

答案 0 :(得分:3)

问题在于orderBy()方法'的各种重载。你有:

您的TABLE_NAME.ENUM_TYPE.desc()SortField,而DSL.rand()Field。为了完成这项工作,您必须致电:DSL.rand()SortField DSL.rand().asc()

我认识到这在API中有些缺陷,可能会在未来版本的jOOQ中修复。我为此修复程序创建了一个GitHub问题:#3631