Будьте в спящем режиме Собственная проблема Запроса с именованными параметрами

У меня есть проблема с, в спящем режиме Собственный Запрос. У меня есть один ВЫБОР, который выбирает часть массива (база данных PostgreSQL).

Проблема, это в спящем режиме, распознает следующую часть: ":300" от "ВЫБОРА my_array [1:300]..." как названный параметром и я получаю следующее исключение: Не все именованные параметры были установлены.

Я пытался выйти из двоеточия (:) с ':', '::' но без успеха.

Быть в спящем режиме версия 3.2

8
задан dime 8 May 2010 в 17:24
поделиться

3 ответа

Я не использую PostgreSQL, но если вы не найдете подходящего решения этой проблемы, вы можете реализовать перехватчик (расширить EmptyInterceptor) и модифицировать ваш запрос на onPrepareStatement(String sql).

Что означает, что вы можете использовать что-то вроде my_array[1|300] и переписать его как my_array[1:300], чтобы обойти проблему именованных параметров.

Edit: Я не уверен на 100%, что вышеописанное работает (переписывание родного SQL и то, разрешит ли парсер запросов специальный символ). Я делал вышеописанное только в HQL и критериях, где я передавал подсказку индекса в качестве комментария к запросу.

4
ответ дан 5 December 2019 в 18:57
поделиться

Двоеточие невозможно избежать в самом Hibernate (известная ошибка с 2005 года).

3
ответ дан 5 December 2019 в 18:57
поделиться
create function array_slice(a anyarray, start int4, end int4) returns anyarray as   
$$
    SELECT a[start:end];
$$
language(sql);

Теперь вызовите эту функцию вместо этого. Не пробовал, но это будет работать как-то так.

1
ответ дан 5 December 2019 в 18:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: