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