Как использовать функцию PostgreSQL xmlexists () в HQL-запросе Hibernate? - PullRequest
0 голосов
/ 27 октября 2019

Я хочу создать HQL-запрос с функцией xmlexists(), но получаю ошибку.

Мой код:

Query query = session.createQuery("From XMLTable AS tb WHERE xmlexists('//food[@id = \"1\"]' PASSING BY REF tb.xmlData)");

List list = query.list();

list.forEach(obj -> {
        printSth((XMLTable) obj);
});

ОШИБКА:

ОШИБКА: строка 1:77: неожиданный токен: PASSING

Я тоже пробовал в pgAdmin 4 и там все отлично работает. Я предполагаю, что это проблема синтаксиса в HQL.

1 Ответ

0 голосов
/ 27 октября 2019

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

Очевидным решением проблемы будет использование session.createNativeQuery() вместо запроса JPQL. Затем вы можете (и должны) использовать простой SQL в качестве аргумента метода.

Другое решение может заключаться в расширении класса диалекта, который Hibernate предоставляет для PostgreSQL, и регистрации новой реализации функции для xmlexists(). Я не уверен, что это сработает.

...