Мне не известен стандартный способ экранирования символа двоеточия в запросе, который явно интерпретируется как префикс именованного параметра и, таким образом, сбивает с толку синтаксический анализатор запроса.
Я бы предложил создать ииспользуйте функции SQL, если это возможно.В зависимости от вашего провайдера, могут быть и другие варианты (например, использование другого символа и замена выбранного символа на :
в перехватчике), но по крайней мере предыдущее предложение сохранит ваш JPA-код переносимым между провайдерами.
PS: если вы используете Hibernate, к HHH-1237 .
добавлен очень старый патч. Обновление: В "интересном" абзаце естьСпецификация JPA 1.0 об именованных параметрах и собственных запросах:
3.6.3 Именованные параметры
Именованный параметр - это идентификатор, к которому добавляется символ «:».Именованные параметры чувствительны к регистру.
Именованные параметры следуют правилам для идентификаторов, определенным в Разделе 4.4.1. Использование именованных параметров применяется к языку запросов Java Persistence и не определяется для собственных запросов .Для собственных запросов может использоваться только позиционная привязка параметров.
Имена параметров, передаваемые в методы setParameter
API Query
, не включают префикс ":".
Это на самом деле не поможет, но ваш случай - сильный намек на то, что «:» в нативных запросах даже не следует рассматривать (по крайней мере, без способа избежать его или отключить его обнаружение).