【问题标题】:JOOQ combining Field and SortField in orderBy method?JOOQ 在 orderBy 方法中结合 Field 和 SortField?
【发布时间】:2014-11-10 02:18:09
【问题描述】:

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

【问题讨论】:

    标签: java mysql sql-order-by jooq


    【解决方案1】:

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

    您的TABLE_NAME.ENUM_TYPE.desc()SortField,而DSL.rand()Field。为了完成这项工作,您必须通过调用 DSL.rand().asc()DSL.rand() 变为 SortField

    我知道这是 API 中的一个缺陷,可能会在 jOOQ 的未来版本中修复。我为此修复创建了一个 GitHub 问题:#3631

    【讨论】:

    • 非常感谢您的帮助。唉,我遇到了另一个问题。你能看看我的编辑吗?
    • @TheShahin:不客气。注意:堆栈溢出的工作方式是每个问题问一个问题。这将使未来的访问者在通过 Google 找到此问题时更容易知道发生了什么。因此,最好再次删除您的编辑,并将其粘贴到新问题中。我会在那里回答(或者可能是其他人)
    • 注明。我删除了我的编辑。我通过编写嵌入到 jOOQ 查询中的原始 SQL 字符串解决了这个问题。它可以工作,虽然它不漂亮,但由于截止日期,我没有时间更改它:) 再次感谢。
    • @TheShahin:很公平。我会在 Stack Overflow 上寻找 jOOQ 问题,所以如果它再次弹出,请随时问另一个问题。
    猜你喜欢
    • 2018-03-22
    • 2018-01-04
    • 2017-06-19
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2020-01-08
    相关资源
    最近更新 更多