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))