我试图从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说的是显然没有可以调用的兼容方法。我该如何解决这个问题?有解决方法吗?
答案 0 :(得分:3)
问题在于orderBy()
方法'的各种重载。你有:
您的TABLE_NAME.ENUM_TYPE.desc()
是SortField
,而DSL.rand()
是Field
。为了完成这项工作,您必须致电:DSL.rand()
,SortField
DSL.rand().asc()
。
我认识到这在API中有些缺陷,可能会在未来版本的jOOQ中修复。我为此修复程序创建了一个GitHub问题:#3631