j'ai
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria("....").list();
}
Comment puis-je récupérer la session si j'utilise entitymanager ou comment puis-je obtenir le résultat de mes critères détachés?
java
hibernate
jpa
hibernate-entitymanager
storm_buster
la source
la source
((EntityManagerImpl)em).getSession();
Réponses:
Pour être totalement exhaustif, les choses sont différentes si vous utilisez une implémentation JPA 1.0 ou JPA 2.0.
JPA 1.0
Avec JPA 1.0, vous devrez utiliser
EntityManager#getDelegate()
. Mais gardez à l'esprit que le résultat de cette méthode est spécifique à l'implémentation, c'est-à-dire non portable d'un serveur d'application utilisant Hibernate à l'autre. Par exemple avec JBoss vous feriez:Mais avec GlassFish , vous devrez faire:
Je suis d'accord, c'est horrible, et la spécification est à blâmer ici (pas assez claire).
JPA 2.0
Avec JPA 2.0, il existe une nouvelle (et bien meilleure)
EntityManager#unwrap(Class<T>)
méthode à privilégier par rapportEntityManager#getDelegate()
aux nouvelles applications.Donc, avec Hibernate comme implémentation JPA 2.0 (voir 3.15. API Native Hibernate ), vous feriez:
la source
entityManager.unwrap(Session.class);
ce qui estSession
enSession.class
? est-ce une importation?org.eclipse.persistence.sessions.Session
Consultez la section " 5.1. Accéder aux API Hibernate depuis JPA " dans le Guide de l'utilisateur Hibernate ORM :
la source
entityManager.unwrap(Session.class);
ce qui estSession
enSession.class
? est-ce une importation?Cela expliquera mieux.
la source
'entityManager.unwrap (Session.class)' est utilisé pour obtenir une session à partir d'EntityManager.
Lien d' application de démonstration .
la source
Je travaillais chez Wildfly mais j'utilisais
et le correct était
la source