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