Java 如何使用jooq编写包含多个字段的条件

Java 如何使用jooq编写包含多个字段的条件,java,sql,jooq,row-value-expression,Java,Sql,Jooq,Row Value Expression,我想用JOOQ写一个如下的条件 AND (id,name) IN (('id1','name1'),('id2','name2'),...) 我试过这种语法 Condition condition= DSL.concat(idField,nameField).in(""); 产生 concat(cast(`id` as char), cast(`name` as char)) in ('id1name1',"id2name2",....)) 但这种解决方案会跳过索引,从而导致巨大的性能问题

我想用JOOQ写一个如下的条件

AND (id,name) IN (('id1','name1'),('id2','name2'),...)
我试过这种语法

Condition condition= DSL.concat(idField,nameField).in("");
产生

concat(cast(`id` as char), cast(`name` as char)) in ('id1name1',"id2name2",....))
但这种解决方案会跳过索引,从而导致巨大的性能问题

我不知道如何把这两个领域结合起来


感谢您的帮助

不要使用字符串连接,而实际上您需要使用行值表达式谓词!使用jOOQ的行值表达式支持,如下所述:

或者更具体地说:

//导入静态org.jooq.impl.DSL.row;
条件条件=行(ID,名称)。在(行(“id1”,“名称1”),行(“id2”,“名称2”);
由于中的泛型varargs参数,您可能需要抑制警告

如果您的目标数据库不支持行值表达式,jOOQ会将上述内容扩展到此谓词

(ID='id1'和NAME='name1')或(ID='id2'和NAME='name2')

发布您尝试过的内容?