在jooq的seek api中使用子查询

时间:2017-04-28 21:41:16

标签: java sql jooq

我在我们的解决方案中使用JOOQ进行评估,我们使用REST API公开数据并检查以下功能是否可以使用jooq的seekAfterseekBefore api。

假设我有一张像

这样的表格
CREATE TABLE Test (
  Id Int NOT NULL PRIMARY KEY,
  Sid varchar(34) NOT NULL,
  ....
)

我们希望使用Id字段进行分页,但不希望将其公开给用户。我们将下一个和前一个分页参数作为响应分发为响应。

目前我们正在构建像

这样的查询
SELECT ... FROM Test WHERE Id > (SELECT Id FROM Test WHERE Sid=?) LIMIT 10;

是否有可能给jooq的seek api而不是文字值一个表达式?

1 个答案:

答案 0 :(得分:1)

你可以做一些事情:

// Assuming this static import:
import static org.jooq.impl.DSL.*;

DSL.using(configuration)
   .select()
   .from(TEST)
   .orderBy(TEST.ID)
   .seekAfter(field(select(TEST.ID).from(TEST).where(TEST.SID.eq(sid))))
   .limit(10)
   .fetch();

基本上,这是将Select<? extends Record1<T>>类型包裹在Field<T>类型https://octobercms.com/docs/plugin/localization#accessing-strings