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