1. Введение
При работе с Hibernate мы можем использовать именованные параметры для безопасной передачи данных в SQL-запрос. Мы присваиваем значения параметрам запроса во время выполнения, чтобы сделать их динамическими. Что еще более важно, это помогает предотвратить атаки путем внедрения кода SQL.
Однако мы можем столкнуться с ошибками при работе с именованными параметрами. Двумя наиболее распространенными из автономной библиотеки Hibernate и реализации Hibernate JPA, соответственно, являются:
Не все именованные параметры установлены
Именованный параметр не привязан
Хотя сообщения об ошибках могут различаться между vanilla Hibernate и его реализацией JPA, основная причина одна и та же.
В этом уроке мы рассмотрим, что вызывает эти ошибки и как их избежать . Попутно мы покажем, как использовать именованные параметры с автономной библиотекой Hibernate.
2. Что вызывает ошибку
При работе с именованными параметрами в Hibernate мы должны присвоить значение каждому именованному параметру перед выполнением запроса.
Давайте рассмотрим пример запроса, в котором используется именованный параметр:
Query<Event> query = session.createQuery("from Event E WHERE E.title = :eventTitle", Event.class);
В этом примере у нас есть один именованный параметр, обозначенный заполнителем :eventTitle
. Hibernate ожидает, что этот параметр будет установлен до того, как мы выполним запрос.
Однако, если мы попытаемся выполнить запрос без установки значения для : eventTitle
:
List<Event> listOfEvents = query.list();
Hibernate выдаст исключение org.hibernate.QueryException
, когда мы его запустим, и мы получим ошибку:
Not all named parameters have been set
3. Исправление ошибки
Чтобы исправить ошибку, мы просто предоставляем значение именованного параметра перед выполнением запроса:
Query<Event> query = session.createQuery("from Event E WHERE E.title = :eventTitle", Event.class);
query.setParameter("eventTitle", "Event 1");
assertEquals(1, query.list().size());
Используя метод setParameter (String, String) объекта
запроса
, мы сообщаем Hibernate, какое значение мы хотим использовать для именованного параметра.
4. Вывод
В этой статье мы рассмотрели именованные параметры и то, как они используются в Hibernate. Мы также показали, как исправить одну из ошибок именованного запроса, с которой мы можем столкнуться.
Как обычно, все образцы кода доступны на GitHub .