((c.status IN ('active', 'completed', 'expired', 'sold'))
AND (c.id IN (1010996, 1011008, 33333333))
используя темплейт. Запрос просто использует sql-файлик и биндит туда коллекцию ид:
public List<Long> findDeltaMCreditIds(List<Long> creditIds) {
return jooq.resultQuery(
getFileString(SQL_FILE_NAME),
cutBrackets(creditIds.toString())) // 1011008, 1010996, 4444444
.fetchInto(Long.class);
}
В самом файлике проверяю теймплейт в выражении IN():
AND (c.id IN (?)) - но проверка происходит только по первому аргументу до первой запятой. Идей нет
Поделюсь, т.к. потратил на это кучу времени. Если в JOOQ нужно передавать в sql-template коллекцию для выражения типа такого: AND (credit.id IN (1,2,3)) => AND (c.id IN ({0})) то сперва преобразуем коллекцию List<Long> ids в строку без скобок, затем отправляем вот такой запрос: jooq.resultQuery(sql, DSL.field(ids, Integer.TYPE)) .fetchInto(Long.class); Выглядит как расплюнуть, но потратил на это гребаных 6 часов
Ну jOOQ классный же ( Надо, кстати, посмотреть, как с ним дружит escape analysis
Обсуждают сегодня