Как написать условие с более чем одним полем с помощью 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')