jooq использует oracle text, содержащий запрос

#java #jooq

#java #jooq

Вопрос:

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

 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);
  

Ответ №1:

Вы уже использовали функцию простого SQL templating в других частях запроса, возможно, непреднамеренно. Теперь вы можете использовать его для создания синтаксических расширений конкретного поставщика непосредственно в 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...)

Комментарии:

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

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

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