Escape-персонаж в JPQL - PullRequest
       6

Escape-персонаж в JPQL

4 голосов
/ 27 марта 2012

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

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

"... где person.name = 'Andy'"

Здесь все работает нормально

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

"... где person.name = 'Andy's'"

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

Ответы [ 2 ]

5 голосов
/ 28 марта 2012

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

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

query.setParameter("name", personName);

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

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

4 голосов
/ 27 марта 2012

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

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

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

...where person.name='Andy''s'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...