JOOQ:无法在动态查询中实现Seek

时间:2015-06-06 21:36:21

标签: java sql jooq

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

seek

2 个答案:

答案 0 :(得分:1)

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

.seek(value1, value2)

这是短暂的:

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

事实上,为方便起见,大多数jOOQ的API都被重载,因此您不必一直使用DSL.val()显式创建绑定值。

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

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

答案 1 :(得分:0)

这似乎解决了它。这是正确的方式吗?

Field[] topicIdArgs = new Field[]{DSL.val(ULong.valueOf(recentTopicId), ULong.class)};
Field[] args = new Field[]{DSL.val(TimeUtils.getTime(recentModifiedOn), Timestamp.class)};
query.addSeekAfter(DSL.function("", Timestamp.class, args), DSL.function("", ULong.class, topicIdArgs));

[编辑。看看Lukas'回答如下]