EntityManager-injection - NullPointerException
In meinem Spring+JPA/Hibernate+Wicket-app, ich habe einen QueryBuilder-bean, die ich verwenden möchte in einem meiner DAOs erzeugt eine typisierte Abfrage mit Hilfe von Kriterien API:
@Service(value="inboxQueryBuilder")
public class InboxQueryBuilder {
@PersistenceContext
EntityManager em;
CriteriaBuilder cb;
public InboxQueryBuilder() {
cb = em.getCriteriaBuilder();
}
public TypedQuery<App> getQueryForApps(AppSearchObject aso) {
...
}
...
}
Jedoch, wenn ich die app starte, bekomme ich eine null-Zeiger-Ausnahme für Zeile:
cb = em.getCriteriaBuilder();
d.h. der EntityManager nicht injiziert. Wissen Sie, warum?
Außerdem ist dieser Einsatz richtig und thread-sicher oder sollte instanziieren ich meine InboxQueryBuilder für jede Abfrage? In diesem Fall, sollte ich auch Spritzen den EntityManager oder sollte ich einfach übergeben Sie es als parameter des Konstruktors (den InboxQueryBuilder bekommen würde, instanziiert für jede Abfrage in der DAO, die hat injizierten EntityManager-Instanz)?
in dem gegebenen Beispiel, es ist eine spring bean. aber ich weiß nicht, ob es ein singleton ist, ist gut.
Keine singletons verwenden, die in einem spring-Projekt. Nutzen spring, singleton-beans statt.
InformationsquelleAutor John Manak | 2010-11-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie keinen Zugriff auf den EntityManager innerhalb des Konstruktors. Werfen Sie einen Blick auf die @PostConstruct-Annotation
EDIT:
Nach der Lektüre Ihrer post nochmal, ich wurde unsicher, ob ich Recht habe. Ich weiß, die Java-EE-Dependency Injection innerhalb eines JBoss funktioniert wie ich es beschrieben habe, aber ich bin mir nicht sicher, über spring-IOC.
Dies ist, wo der Frühling ist dein Freund! Es tut der autowire der entity-manager für Sie - ohne Feder würde es nicht funktionieren - die auto-injection des Entity-Manager funktioniert nur (über die Applikations-Server) wenn Sie laufen innerhalb eines EJB.
InformationsquelleAutor Christian Kuetbach
Haben Sie diese Bohne, die irgendwo in Ihrem Anwendungskontext?
dann der Kommentar von seanizer ist die Antwort. Sie sollten es machen, Frühling singleton
InformationsquelleAutor nanda
Frühling verwendet die Java-Beans-Mechanismus, also ich bin ziemlich sicher, dass dies nicht ausreicht:
Hier ist der standard-Weg:
OK, Sie haben autowiring eingeschaltet?
InformationsquelleAutor Sean Patrick Floyd