Question

J'ai

private EntityManager em;

public List getAll(DetachedCriteria detachedCriteria)   {

    return detachedCriteria.getExecutableCriteria( ??? ).list();
}

Comment puis-je récupérer la session si je les utilise entitymanager ou comment puis-je obtenir le résultat de mon DetachedCriteria?

Était-ce utile?

La solution

Pour être tout à fait exhaustif, les choses sont différentes si vous utilisez un JPA 1.0 ou une implémentation JPA 2.0.

JPA 1.0

Avec JPA 1.0, vous devriez utiliser EntityManager#getDelegate() . Mais gardez à l'esprit que le résultat de cette méthode est spécifique de mise en œuvre à savoir non portable du serveur d'applications via Hibernate à l'autre. Par exemple avec JBoss vous feriez:

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

avec GlassFish , vous auriez à faire:

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

Je suis d'accord, c'est horrible, et la spécification 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 est préférable à EntityManager#getDelegate() pour les nouvelles applications.

avec Hibernate comme implémentation JPA 2.0 (voir 3.15 API native Mise en veille prolongée de ), vous devez faire:.

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

Autres conseils

Voir la section " 5.1. Mise en veille prolongée accéder aux API de JPA " dans la section Mise en veille prolongée ORM Guide de l'utilisateur :

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

expliquera mieux.

EntityManager em = new JPAUtil().getEntityManager();
Session session = em.unwrap(Session.class);
Criteria c = session.createCriteria(Name.class);

Je travaillais dans wildfly mais j'utilisais

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

et la bonne était

org.hibernate.Session session = (Session) manager.getDelegate();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top