116 votes

Comment puis-je obtenir l'objet de session si j'ai le entitymanager

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?

190voto

Pascal Thivent Points 295221

Pour être totalement exhaustif, les choses sont différentes si vous utilisez une JPA 1.0 ou JPA 2.0 mise en œuvre.

JPA 1.0

Avec JPA 1.0, vous devez utiliser EntityManager#getDelegate(). Mais gardez à l'esprit que le résultat de cette méthode est mise en œuvre spécifique, c'est à dire non portable de serveur d'applications à l'aide d'Hibernation pour les autres. Par exemple avec JBoss vous ferait:

org.hibernate.Session session = (Session) manager.getDelegate();

Mais avec GlassFish, que vous avez à faire:

org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession(); 

Je suis d'accord, c'est horrible, et le spec est à blâmer ici (pas assez clair).

JPA 2.0

Avec JPA 2.0, il y a une nouvelle (et bien mieux) EntityManager#unwrap(Class<T>) méthode qui consiste à être préférée à l' EntityManager#getDelegate() pour les nouvelles applications.

Donc, avec Hibernate comme JPA 2.0 mise en œuvre (voir 3.15. Native API Hibernate), vous voulez faire:

Session session = entityManager.unwrap(Session.class);

44voto

Vladimir Ivanov Points 23731

Manuel Hibernate

Voir point 15.8

Et vous pouvez toujours obtenir la session:

 Session session = entityManager.unwrap(Session.class);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X