Jooq использовать текст оракула содержит запрос

Я строю запрос, используя jooq, и мне нужно добавить условие в предложение where, используя текст оракула. Пока у меня есть набор условий, которые я создаю и использую для построения запроса в конце...

List<Condition> conditions = new ArrayList<Condition>();
if (null != searchCriteria.getId()) {
    conditions.add(field("id").eq(searchCriteria.getId()));
} else if (null != searchCriteria.getSurname()) {
    //add contains condition here. e.g. "CONTAINS (SURNAME, 'POTTER', 1) > 0
}

Я не понимаю, как построить это условие или, по крайней мере, вручную построить эту строку SQL, а затем добавить условие, чтобы затем сгенерировать полный запрос, например...

org.jooq.Query ps = select(field("ID")).from(table("PERSON per").where(conditions);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
160
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы уже использовали функцию простые шаблоны SQL в других частях запроса, возможно, непреднамеренно. Теперь вы можете использовать его для создания расширений синтаксиса конкретного поставщика непосредственно в jOOQ. Например:

static Condition contains(Field<String> field, String search, int label) {
    return condition("contains({0}, {1}, {2}) > 0", field, val(search), inline(label));
}

В приведенном выше примере я использую DSL.condition(String, Object...).

Спасибо за этот ответ @Lukas Eder, единственное, что я обнаружил, это то, что мне не удалось иметь переменную привязки для значения метки оценки. Я получаю ORA-29909: метка вспомогательного оператора не является буквальным числом. Мне пришлось жестко закодировать это значение, чтобы оно работало, кто-нибудь знает обходной путь.

jonesy 11.04.2019 14:11

Извините, что продолжаю спрашивать, но как мне динамически создать предложение from с помощью соединений таблиц, как это возможно с предложением where ... или мне следует задать другой вопрос? У меня есть поисковый запрос, который создается динамически, и если существует параметр поиска, мне нужно добавить объединение таблиц... но я хотел бы создать список объединений, которые будут добавлены в запрос в конце.

jonesy 11.04.2019 17:13

@jonesy: Пожалуйста, задайте новый вопрос

Lukas Eder 11.04.2019 17:18

Другие вопросы по теме