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

问题描述:

我有一个DB表,其中包含有关发布的信息。发行版有一个次要版本号,它是一个整数。我想执行一个查询,它读取给定发行版中的值,并返回表中所有字段的当前值(减去ID),次要版本增加1。jOOQ - 如何引用查询中的字段值

以下查询返回当前值,但我无法弄清楚如何取当前值并将其增加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(); 

稍后我发现一个RTFMing,我发现答案是bea美丽的简单。 jOOQ支持arithmetic functions on columns,所以我可以在列上调用.add(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.add(1) 
     : V_RELEASE.field(f)) 
    .collect(Collectors.toList())) 
    .from(V_RELEASE) 
    .where(V_RELEASE.ID.eq(id))