Pregunta

Tengo una clase de Java (Entidad) con una serie de consultas con nombre. Cuando la primavera intenta inyectar el frijol relacionado, no es encontrar una de las consultas.

Como ejemplo:

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

Cuando la primavera intenta inyectar el frijol, estoy consiguiendo:

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

Estoy seguro de las consultas son correctos (todas las pruebas unitarias para ellos están pasando).

¿Alguien sabe la causa de ello?

¿Fue útil?

Solución 2

Bueno, he conseguido el error. Lo que estaba ocurriendo es el siguiente:

En mi clase había un método anotado con @Resource, que llamó a la consulta con nombre declarado en otra clase anotado con @Entity).

Por lo tanto, cuando se inyecta la primavera y ejecuta el método, trata de utilizar la consulta con nombre. Sin embargo, la consulta no está 'listo' para ser utilizado, y la excepción Throwed es que no se encontró la consulta.

Para resolver esto, tengo que correr un método diferente que se llama cuando se acaban las inyecciones de primavera, es decir, mi clase tiene que implementar la interfaz org.springframework.context.ApplicationListener y espera el método onApplicationEvent para un org.springframework.context .event.ContextRefreshedEvent evento.

Eso es todo chicos. Gracias Bozho por su ayuda.

Otros consejos

  • Asegúrese que su entidad ha sido mapeado / escaneada. ¿Es anotado con @Entity, es añadido a la persistence.xml o para la configuración del proveedor pertinente, o es escaneada automáticamente.

  • Me había prefijo del nombre de la clase a la consulta -. MyEntity.Query1 es decir, MyEntity.Query1 etc.

  • verificar si hay errores de implementación no - es decir, que su consulta es correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top