我正在尝试从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