У меня есть проблема с, в спящем режиме Собственный Запрос. У меня есть один ВЫБОР, который выбирает часть массива (база данных PostgreSQL).
Проблема, это в спящем режиме, распознает следующую часть: ":300" от "ВЫБОРА my_array [1:300]..." как названный параметром и я получаю следующее исключение: Не все именованные параметры были установлены.
Я пытался выйти из двоеточия (:) с ':', '::' но без успеха.
Быть в спящем режиме версия 3.2
Я не использую PostgreSQL, но если вы не найдете подходящего решения этой проблемы, вы можете реализовать перехватчик (расширить EmptyInterceptor) и модифицировать ваш запрос на onPrepareStatement(String sql)
.
Что означает, что вы можете использовать что-то вроде my_array[1|300]
и переписать его как my_array[1:300]
, чтобы обойти проблему именованных параметров.
Edit: Я не уверен на 100%, что вышеописанное работает (переписывание родного SQL и то, разрешит ли парсер запросов специальный символ). Я делал вышеописанное только в HQL и критериях, где я передавал подсказку индекса в качестве комментария к запросу.
Двоеточие невозможно избежать в самом Hibernate (известная ошибка с 2005 года).
create function array_slice(a anyarray, start int4, end int4) returns anyarray as
$$
SELECT a[start:end];
$$
language(sql);
Теперь вызовите эту функцию вместо этого. Не пробовал, но это будет работать как-то так.