«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.