Экранирующий символ в JPQL

Что такое escape-символ в JPQL, который мы можем использовать для экранирования таких символов, как "'"

Пример: я делаю что-то вроде

"... где person.name='Энди'"

Вот работает нормально

но когда имя человека Энди, тогда пункт where становится похожим на

"...где person.name='Энди'"

и он возвращает сообщение об ошибке


person Programmer    schedule 27.03.2012    source источник


Ответы (2)


Он не может понять, где заканчивается литерал строки. Решение красиво сказано в спецификации:

Строковый литерал, содержащий одинарную кавычку, представляется двумя одинарными кавычками, например: «literal’s».

В вашем случае означает:

...where person.name='Andy''s'
person Mikko Maunu    schedule 27.03.2012

Ниже приведен пример кода для выполнения запроса с использованием именованного параметра.

Query query = entityManager.createQuery("SELECT p FROM Person p WHERE p.name LIKE :name" ); 

query.setParameter("name", personName);

Здесь вы можете передать строку personName, которая может содержать специальный символ, например «Энди».

Кроме того, он выглядит очень чистым и не требует проверки параметра перед выполнением запроса и изменением строки поиска.

person Nayan Wadekar    schedule 28.03.2012