jOOQ - 如何引用查询中字段的值

时间:2017-10-13 12:18:02

标签: sql jooq

我有一个数据库表,其中包含有关发布的信息。版本具有次要版本号,这是一个整数。我想执行一个查询,该查询读取给定版本中的值,并返回表中所有字段的当前值(减去ID),次要版本增加1。

下面的查询返回当前值,但我无法弄清楚如何获取当前值并将其增加一。

select(Arrays
    .stream(V_RELEASE.fields())
    .filter(f -> !f.equals(V_RELEASE.ID))
    .map(f -> f.equals(V_RELEASE.MINOR_VERSION)
        ? V_RELEASE.MINOR_VERSION   <-- I want to increase this by 1
        : V_RELEASE.field(f))
    .collect(Collectors.toList()))
    .from(V_RELEASE)
    .where(V_RELEASE.ID.eq(id))

我确信这有一个非常简单的解决方案,但是我一直在墙上撞了几个小时,现在无济于事。任何人都可以用正确的语法帮助一个jOOQ新手吗?

添加了上下文
我的回答基于对以下问题的回复:

JOOQ fetch record from table and insert it into another table

完整的查询应该基于现有的记录创建一个新记录,次要版本增加1,看起来像这样:

ctx
    .insertInto(V_RELEASE)
    .columns(Arrays.stream(V_RELEASE.fields())
        .filter(f -> !f.equals(V_RELEASE.ID))
        .collect(Collectors.toList()))
    .select(
        select(Arrays
            .stream(V_RELEASE.fields())
            .filter(f -> !f.equals(V_RELEASE.ID))
            .map(f -> f.equals(V_RELEASE.MINOR_VERSION)
                  // I want to increase the minor version number by 1
                ? V_RELEASE.MINOR_VERSION 

                : V_RELEASE.field(f))
            .collect(Collectors.toList()))
            .from(V_RELEASE)
            .where(V_RELEASE.ID.eq(id))
    )
    .execute();

1 个答案:

答案 0 :(得分:1)

稍后有点RTFMing我发现答案非常简单。 jOOQ支持arithmetic functions on columns,所以我可以在列上调用.add(1)来到达我想要的位置:

window.location