2010-12-02 3 views
18

Возможно ли получить объект сеанса Hibernate из EntityManager? Я хочу, чтобы получить доступ к некоторым зимовать специфический API ...Доступ к сеансу Hibernate из EJB с использованием EntityManager

Я уже пытался что-то вроде:

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

, но как только я вызвать метод в EJB я получаю «Исключение системы произошло во время вызова на EJB»с NullPointerException

Я использую GlassFish 3.0.1

ответ

26

Bozho и partenon являются правильными, но:

В JPA 2, предпочтительный механизм entityManager.unwrap(class)

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

Я думаю, что ваше исключение вызвано тем, что вы пытаетесь бросить к реализации класса (возможно, вы имели дело с прокси-сервером JDK). Передача в интерфейс, и все должно быть хорошо (в версии JPA 2, литье не требуется).

+0

+1 к новому механизму – Bozho 2010-12-02 13:56:37

6

Если ваш EntityManager правильно введен (с использованием @PersistenceContext) и не равно нулю, то должно работать:

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

От Hibernate EntityManager документы, предпочтительный способ сделать это:

Session session = entityManager.unwrap(Session.class); 
Смежные вопросы