Ottenere 'query denominata non trovato' con il framework Spring
-
01-10-2019 - |
Domanda
Ho una classe Java (Entity) con una serie di query denominate. Quando la primavera tenta di iniettare il relativo fagiolo, non è trovare una delle query.
A titolo di esempio:
@NamedQueries({
@NamedQuery(name = "Query1", query = "..."),
@NamedQuery(name = "Query2", query = "..."),
@NamedQuery(name = "Query3", query = "..."),
@NamedQuery(name = "Query4", query = "..."),
@NamedQuery(name = "Query5", query = "...")
})
Quando Primavera tenta di iniettare il fagiolo, sto ottenendo:
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 ...
sono sicuro che le query sono corretti (tutti i test di unità per loro sono di passaggio).
Qualcuno sa la causa principale per questo?
Soluzione 2
Bene, Ive ha ottenuto l'errore. Quello che stava accadendo è la seguente:
Nella mia classe c'era un metodo annotato con @Resource, che ha chiesto la query denominata dichiarato in un'altra classe annotato con @Entity).
Così, quando inietta primavera ed esegue il metodo, si tenta di utilizzare la query di nome. Tuttavia, la query non e 'pronto' per essere utilizzato, e l'eccezione Throwed è che la query non è stato trovato.
Per risolvere questo, devo correre un diverso metodo chiamato quando le iniezioni molla sono finiti, cioè, la classe deve implementare l'interfaccia org.springframework.context.ApplicationListener e attende metodo onApplicationEvent per un org.springframework.context .event.ContextRefreshedEvent evento.
questo è tutto ragazzi. Grazie Bozho per il vostro aiuto.
Altri suggerimenti
-
assicurarsi che il soggetto è stato mappato / scansione. E 'annotato con
@Entity
, è aggiunto allapersistence.xml
o per la configurazione del provider in questione, o è sottoposto a scansione automaticamente. -
mi piacerebbe prefisso il nome della classe alla query -. Vale a dire
MyEntity.Query1
,MyEntity.Query1
etc -
verificare se ci sono errori, non di implementazione - vale a dire che la query è corretto