Получение именованного запроса не найдено с помощью Spring Framework - PullRequest
5 голосов
/ 01 июля 2010

У меня есть класс Java (Entity) с набором именованных запросов.Когда Spring пытается внедрить связанный bean-компонент, он не находит один из запросов.

Как пример:

@NamedQueries({
        @NamedQuery(name = "Query1", query = "..."),
        @NamedQuery(name = "Query2", query = "..."),
        @NamedQuery(name = "Query3", query = "..."),
        @NamedQuery(name = "Query4", query = "..."),
        @NamedQuery(name = "Query5", query = "...")
})

Когда Spring пытается внедрить bean-компонент, я получаю:

org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'myBean': Injection of resource methods failed;nested exception is
java.lang.IllegalArgumentException: Named query not found: Query3 at ...

Я уверен, что запросы верны (все модульные тесты для них проходят).

Кто-нибудь знает причину этого?

Ответы [ 2 ]

5 голосов
/ 01 июля 2010
  • убедитесь, что ваша сущность была сопоставлена ​​/ отсканирована.Это аннотировано @Entity, добавлено ли оно в persistence.xml или в соответствующую конфигурацию провайдера, или оно автоматически сканируется.

  • Я бы добавил префикс имени классак запросу - т.е. MyEntity.Query1, MyEntity.Query1 и т. д.

  • проверьте, нет ли ошибок развертывания - то есть, что ваш запрос правильный

2 голосов
/ 02 июля 2010

Ну, я получил ошибку.Происходит следующее:

В моем классе был один метод, аннотированный @Resource, который вызывал именованный запрос, объявленный в другом классе, аннотированном @Entity).

Итак, когда Springвнедряет и запускает метод, он пытается использовать именованный запрос.Тем не менее, запрос не «готов» для использования, и исключение состоит в том, что запрос не был найден.

Чтобы решить эту проблему, я должен запустить другой метод, который вызывается, когда инъекции Spring завершены,т. е. мой класс должен реализовать интерфейс org.springframework.context.ApplicationListener, а метод onApplicationEvent ожидает события org.springframework.context.event.ContextRefreshedEvent.

Это все, ребята.Спасибо Божо за помощь.

...