persistencia manager inyectar examples java hibernate jpa java-ee glassfish-3

java - examples - inyectar entitymanager



Accediendo a Hibernate Session desde EJB usando EntityManager (4)

¿Es posible obtener el objeto Session de Hibernate del EntityManager? Quiero acceder a alguna API específica de hibernación ...

Ya probé algo como:

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

pero tan pronto como invoco un método en el EJB obtengo "Se produjo una excepción del sistema durante una invocación en EJB" con una excepción NullPointerException

Yo uso glassfish 3.0.1


Desde los documentos de Hibernate EntityManager, la forma preferida de hacerlo es:

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


Si su EntityManager está correctamente inyectado (utilizando @PersistenceContext ) y no es nulo, lo siguiente debería funcionar:

org.hibernate.Session hSession = (Session) em.getDelegate();


Tan simple como:

Session session = (Session) em.getDelegate();


Bozho y partenon son correctos, pero:

En JPA 2, el mecanismo preferido es entityManager.unwrap(class)

HibernateEntityManager hem = em.unwrap(HibernateEntityManager.class); Session session = hem.getSession();

Creo que su excepción se debe a que está intentando convertir a una clase de implementación (tal vez estaba tratando con un proxy JDK). Conviértase en una interfaz, y todo debería estar bien (en la versión JPA 2, no se necesita ningún casting).