Функции Orcale DB в JPA / HQL-запросах не работают - PullRequest
0 голосов
/ 26 марта 2020

Я реализую новую функцию в нашем коде, которая требует некоторых функций oracle дБ. Мы используем JPA / HQL-запросы с CriteriaBuilder и без нативных запросов, поэтому он довольно сложный и нелегко совместимый.

Мне нужны функции CAST и REGEXP_SUBSTR для выбора определенного значения c из поля XML.

Так что это был мой первый подход. Я попытался реализовать функции с помощью функции literal(T t) CriteriaBuilder, например:

Expression<String> customField1 = cb.literal("CAST(REGEXP_SUBSTR(xml_data, '<CustomField>(.+?)</CustomField>', 1, 1 , NULL, 1) AS VARCHAR2(100)) AS customfield1");

Затем я реализовал выражение как multiselect в нашем запросе, например:

.multiselect(
  customField1
);

Но это не сработало, как ожидалось. У меня есть некоторые ошибки, такие как Error: Unexpected ')' из HQL, что означает, что функции не выполняются должным образом.

Поэтому я попытался создать выражение с типом Query, которое также будет использоваться Создание собственных запросов.

Итак, я сделал это:

Expression<Query> extract1 = cb.literal(em.createQuery("CAST(REGEXP_SUBSTR(xml_data, '<CustomField>(.+?)</CustomField>', 1, 1 , NULL, 1) AS VARCHAR2(100)) AS customfield1"));

И затем добавил его в мультиселектор. Это также дает мне ошибку, но очень странную, которую я сейчас не локализовал в журналах. Я собираюсь воспроизвести его и опубликовать здесь ошибку.

Кто-нибудь знает, как я могу добавить эти функции в запрос?

...