Рубрики
Без рубрики

Ошибка спячки “Не все названные параметры были установлены”

Узнайте, что вызывает ошибку Hibernate “Не все названные параметры были установлены” и как ее избежать.

Автор оригинала: baeldung.

1. Введение

При работе с Hibernate мы можем использовать названные параметры для безопасной передачи данных в запрос S’L. Мы присваиваем значения параметрам запросов во время выполнения, чтобы сделать их динамическими. Что еще более важно, это помогает предотвратить атаки инъекций S’L.

Тем не менее, мы можем столкнуться с ошибками при работе с названными параметрами. Двумя наиболее распространенными из автономной библиотеки Hibernate и реализации Hibernate JPA, соответственно, являются:

  • Не все названные параметры были установлены
  • Названный параметр не связан

Хотя сообщения об ошибках могут отличаться между vanilla Hibernate и его реализацией JPA, основная причина одинакова.

В этом учебнике мы посмотрим на что вызывает эти ошибки и как их избежать . По пути мы продемонстрируем, как использовать названные параметры с автономной библиотекой Hibernate.

2. Что вызывает ошибку

При работе с названными параметрами в Hibernate мы должны назначить значение для каждого названного параметра перед выполнением запроса.

Рассмотрим пример запроса, который использует названный параметр:

Query query = session.createQuery("from Event E WHERE E.title = :eventTitle", Event.class);

В этом примере у нас есть один названный параметр, указанный :eventTitle заполнитель. Hibernate ожидает, что этот параметр будет установлен до выполнения запроса.

Однако, если мы попытаемся выполнить запрос, не установив значение для: eventTitle :

List listOfEvents = query.list();

Спячка бросит org.hibernate.QueryException когда мы забудем его, и мы получим ошибку:

Not all named parameters have been set

3. Исправление ошибки

Чтобы исправить ошибку, мы просто предоставляем значение для названного параметра перед выполнением запроса:

Query query = 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 .