java-JOOQ在orderBy方法中组合了Field和SortField?

我正在尝试从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所说的是,显然没有可以调用的兼容方法.我将如何解决这个问题?有解决方法吗?

解决方法:

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

> SelectOrderByStep(Field, Field)
> SelectOrderByStep(SortField, SortField)

您的TABLE_NAME.ENUM_TYPE.desc()是SortField,而DSL.rand()是Field.为了使此工作有效,您必须通过调用DSL.rand().asc()将DSL.rand()设置为SortField.

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

上一篇:java-如何在jooq中选择带有联接的自动生成的记录和其他数据?


下一篇:打包通用代码以在Java中更好地重用代码