Синтаксис JPQL LIKE со строками

1

РЕДАКТИРОВАТЬ:

Я изменил запрос с жесткой кодировкой:

 query.setParameter("desc", "%unplug //your// server... enjoy the freedom%" ESCAPE '//')

и теперь я получаю com.sun.jdi.InvocationException occurred invoking method.


Там также не было произведено стек.




У меня есть столбец описания в моей базе данных PostgreSQL, и я пытаюсь запросить его с предложением LIKE, однако я не могу получить никаких результатов. Вот пример:

    Query query = em.createQuery("from MyClass c WHERE c.description LIKE :desc");
    query.setParameter("desc", "%unplug /your/ server... enjoy the freedom%"); 

В базе данных у меня много описаний, содержащих подстроку вышеприведенного текста. Я провел много исследований и посмотрел на экраны специальных символов и т.д., Но ничего не сработало.

Я что-то упускаю, я просто не могу понять, что это.

Теги:
jpa
jpql

1 ответ

0

Скорее всего, косая черта/испортит разбор в PG. Поверните параметр в цитируемый литерал. Если вы не уверены, что никакие специальные символы не попадают в строковые аргументы (т.е. Вы управляете строками), это всегда хорошая идея, чтобы избежать SQL-инъекции.

query.setParameter("desc", "quote_literal('%unplug /your/ server... enjoy the freedom%')");
  • 0
    Спасибо @Patrick; Я попробую это завтра. Хотелось бы, чтобы у JPA было что-то подобное, чтобы нам не приходилось использовать специальные функции БД, чтобы это работало.
  • 0
    unfort. это не сработало.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню