Как написать условие с более чем одним полем с помощью jooq

Я хотел бы написать условие как следующее с 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",....))

Но это решение приводит к огромной проблеме производительности, пропуская индексы

Я понятия не имею, как собрать два поля вместе

Спасибо за вашу помощь

1 ответ

Решение

Не используйте конкатенацию строк, когда на самом деле вы хотите использовать предикаты выражения значения строки! Используйте поддержку выражений значений строк в jOOQ, как описано здесь: http://www.jooq.org/doc/3.0/manual/sql-building/column-expressions/row-value-expressions

Или более конкретно:

// import static org.jooq.impl.DSL.row;
Condition condition = row(ID, NAME).in(row("id1", "name1"), row("id2", "name2"));

Возможно, вам придется подавить предупреждения из-за общего параметра varargs в Row2.in(Row2...)

Если ваша целевая база данных не поддерживает выражения значения строки, jOOQ расширит вышеприведенное значение до этого предиката

(ID = 'id1' AND NAME = 'name1') OR (ID = 'id2' AND NAME = 'name2')
Другие вопросы по тегам