EntityManager injection - NullPointerException
Dans mon Printemps+JPA/Hibernate+Portillon application, j'ai un QueryBuilder de haricot que je veux l'utiliser dans un de mes DAOs qui génère un tapé la requête avec l'aide de l'API criteria:
@Service(value="inboxQueryBuilder")
public class InboxQueryBuilder {
@PersistenceContext
EntityManager em;
CriteriaBuilder cb;
public InboxQueryBuilder() {
cb = em.getCriteriaBuilder();
}
public TypedQuery<App> getQueryForApps(AppSearchObject aso) {
...
}
...
}
Cependant, lorsque je lance l'application, j'obtiens une exception de pointeur null pour la ligne:
cb = em.getCriteriaBuilder();
c'est à dire l'EntityManager à ne pas avoir injecté. Savez-vous pourquoi?
Aussi, est-ce correct d'utilisation et thread-safe ou devrais-je instancier mon InboxQueryBuilder pour chaque requête? Dans ce cas, dois-je aussi injecter de l'EntityManager ou devrais-je passer en tant que paramètre du constructeur (le InboxQueryBuilder serait d'obtenir instancié pour chaque requête dans le DAO qui a l'injection d'une instance de l'EntityManager)?
dans l'exemple donné, c'est un printemps bean. mais je ne sais pas si faire un singleton est bon.
N'utilisez pas des singletons dans un projet pour le printemps. Utiliser le printemps singleton haricots à la place.
OriginalL'auteur John Manak | 2010-11-09
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas accéder à l'EntityManager dans le constructeur. Jetez un oeil à la @PostConstruct-Annotation
EDIT:
Après lecture de votre post, encore une fois, je commence à est devenu incertain, si je suis à droite. Je connais le Java EE-Injection de Dépendance dans un JBoss fonctionne comme je l'ai décrit, mais je ne suis pas sûr de printemps-CIO.
C'est où le printemps est votre ami! Il est en train de faire la autowire de l'entité gestionnaire pour vous - sans ressort, ce ne serait pas de travail - la fonction d'injection de l'Entité Gestionnaire fonctionne uniquement (via le Serveur d'Application) si vous êtes en cours d'exécution à l'intérieur d'un EJB.
OriginalL'auteur Christian Kuetbach
Avez-vous ce bean quelque part dans votre contexte d'application?
alors le commentaire de seanizer est la réponse. Vous devriez en faire le printemps singleton
OriginalL'auteur nanda
Printemps utilise le Java Beans mécanisme, donc je suis assez sûr que c'est insuffisant:
Ici de façon standard:
OK, avez-vous permettra à l'autowiring allumé?
OriginalL'auteur Sean Patrick Floyd