java - 乔克 : Unable to implement Seek in Dynamic Query

标签 java sql jooq

我正在尝试编写一个使用 seek 方法的动态查询。我使用 addSeekAfter 作为 seek 的替代品是有缺陷的。我如何解决它?

// my current setup
create.select(TOPIC.ID, TOPIC.DESCRIPTION)
.from(TOPIC)
.orderBy(TOPIC.MODIFIED_ON.desc(), TOPIC.ID.desc())
.seek(recModifiedOn, ULong.valueOf(recentTopicId))
.limit(noOfRecords)
.fetch()
.map(new TopicRecordMapper());

// what I want to move to
SelectQuery query = create.selectQuery();
query.addSelect(TOPIC.ID, TOPIC.DESCRIPTION);
query.addFrom(TOPIC);
query.addOrderBy(TOPIC.MODIFIED_ON.desc(), TOPIC.ID.desc());
// below addSeekAfter is not yielding identical results as above
query.addSeekAfter(
 DSL.field(TOPIC.MODIFIED_ON.le(TimeUtils.getTime(recentModifiedOn))),  
 DSL.field(TOPIC.ID.le(ULong.valueOf(recentTopicId))));
query.addLimit(noOfRecords);
query.fetch().map(new TopicRecordMapper());

最佳答案

DSL API提供了一种便捷的方法seek(T1, T2)其中:

.seek(value1, value2)

只是这个的缩写:

.seek(DSL.val(value1), DSL.val(value2))

事实上,大多数 jOOQ 的 API 都是为了方便而重载的,这样您就不必使用 DSL.val() 显式创建绑定(bind)值。一直以来。

但是,“模型 API”( see the manual's section about DSL vs model API for details ) 不包含那么多便捷方法。这意味着您必须显式创建绑定(bind)值。写下这个:

query.addSeekAfter(
    DSL.val(recentModifiedOn),  
    DSL.val(ULong.valueOf(recentTopicId)));

For more information, please consider also looking into the manual's section about bind variables .

关于java - 乔克 : Unable to implement Seek in Dynamic Query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687796/

相关文章:

xml - 春&jOOQ : configuring postgreSQL driver throws an error

java - 服务器遇到内部错误,无法满足此请求

Java 错误 - 缺少方法体或声明抽象

php - 如何显示未找到的记录php

sql - 一个项目中允许的最大数据集数

SQL 查询根据相邻记录插入时间戳

java - 检查 org.jooq.exception.DataAccessException 是否序列化失败

java - 使用 Java 语言在 MySQL 中设置 SQL 用户定义函数的问题

c# - 我想读取控制台模式子进程的输出

java - Jooq Java SpringBoot - 无法自动生成类