yo tengo
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria("....").list();
}
¿Cómo puedo recuperar la sesión si estoy usando entitymanager o cómo puedo obtener el resultado de mis criterios separados?
java
hibernate
jpa
hibernate-entitymanager
Storm_buster
fuente
fuente
((EntityManagerImpl)em).getSession();
Respuestas:
Para ser totalmente exhaustivo, las cosas son diferentes si está utilizando una implementación JPA 1.0 o JPA 2.0.
JPA 1.0
Con JPA 1.0, tendrías que usar
EntityManager#getDelegate()
. Pero tenga en cuenta que el resultado de este método es específico de la implementación, es decir, no portátil del servidor de aplicaciones que usa Hibernate al otro. Por ejemplo, con JBoss haría:Pero con GlassFish , tendrías que hacer:
Estoy de acuerdo, eso es horrible, y la especificación es la culpable aquí (no lo suficientemente clara).
JPA 2.0
Con JPA 2.0, hay un
EntityManager#unwrap(Class<T>)
método nuevo (y mucho mejor) que es preferibleEntityManager#getDelegate()
a las aplicaciones nuevas.Entonces, con Hibernate como implementación JPA 2.0 (ver 3.15. API de Hibernate nativa ), harías:
fuente
entityManager.unwrap(Session.class);
lo que esSession
enSession.class
? ¿es una importación?org.eclipse.persistence.sessions.Session
Consulte la sección " 5.1. Acceso a las API de Hibernate desde JPA " en la Guía del usuario de Hibernate ORM :
fuente
entityManager.unwrap(Session.class);
lo que esSession
enSession.class
? ¿es una importación?Esto lo explicará mejor.
fuente
'entityManager.unwrap (Session.class)' se usa para obtener la sesión de EntityManager.
Enlace de la aplicación de demostración .
fuente
Estaba trabajando en Wildfly pero estaba usando
y lo correcto fue
fuente