我想将Postgres数据库表与Jooq记录列表同步。
我有一个包含复合主键和每行中其他三个值的表
table(k1, k2, v1, v2, v3)
例如,数据可能是
Last, First, Age, Weight, Height Smith, Joe, 21, 75, 160 Jones, Pete, 23, 80, 180
(请使用名称作为主键的不良形式。。。)
我的Java代码中也有该表的Jooq记录列表。假设有两个Java记录
[ <Smith, Joe, 21, 75, 180>, <Taylor, Mark, 54, 90, 170> ]
我想发生的是当我运行一些代码时,
我设法创建了一个执行前两部分的功能,但是卡在了第三部分上。我希望在JOOQ中有一个非常简单的“一个班轮”,基本上
delete from my_table where (first, last) not in (values ('Joe', 'Smith'), ('Mark', 'Taylor'))
但我无法计算出相应的Java代码来做到这一点。
有任何Jooq大师在阅读此书吗?
我有明显的事情要注意吗?
您的查询可以转换为以下jOOQ代码:
// Assuming this: import static org.jooq.impl.DSL.*; using(configuration) .deleteFrom(MY_TABLE) .where(row(MY_TABLE.FIRST, MY_TABLE.LAST).notIn( row("Joe", "Smith"), row("Mark", "Taylor") )) .execute();
这DSL.row()用于构造行值表达式。请注意,这ROW是PostgreSQL中的可选关键字。您只是在您的SQL示例中忽略了它。
DSL.row()
ROW
另请参见手册中有关IN度数大于1的谓词的部分:
IN
http://www.jooq.org/doc/latest/manual/sql-building/conditional- expressions/in-predicate-degree-n