У меня есть класс Java (Объект) с рядом именованных запросов. Когда Spring пытается ввести связанный боб, он не находит один из запросов.
Как пример:
@NamedQueries({
@NamedQuery(name = "Query1", query = "..."),
@NamedQuery(name = "Query2", query = "..."),
@NamedQuery(name = "Query3", query = "..."),
@NamedQuery(name = "Query4", query = "..."),
@NamedQuery(name = "Query5", query = "...")
})
Когда Spring пытается ввести боб, я добираюсь:
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 ...
Я уверен, что запросы корректны (все модульные тесты на них являются передающими).
Кто-либо знает первопричину для него?
Что ж, я понял ошибку. Произошло следующее:
В моем классе был один метод, аннотированный @Resource, который вызывал именованный запрос, объявленный в другом классе, аннотированном @Entity).
Итак, когда Spring внедряет и запускает метод, он пытается использовать именованный запрос. Однако запрос не «готов» к использованию, и создается исключение, что запрос не найден.
Чтобы решить эту проблему, мне нужно запустить другой метод, вызываемый после завершения инъекций Spring, т.е. мой класс должен реализовать интерфейс org.springframework.context.ApplicationListener, а метод onApplicationEvent ожидает org.springframework.context .event.ContextRefreshedEvent событие.
Это все, ребята. Спасибо Божо за помощь.
убедитесь, что ваш объект был нанесен на карту / сканирован. Аннотируется ли он @Entity
, добавляется ли он в persistence.xml
или в соответствующую конфигурацию поставщика, или он автоматически сканируется.
Я бы поставил перед запросом префикс имени класса - например, MyEntity.Query1
, MyEntity.Query1
и т. Д.
проверьте, нет ли ошибок развертывания - т.е. ваш запрос правильный