Подтвердить что ты не робот

Доступ к сеансу Hibernate из EJB с помощью EntityManager

Возможно ли получить объект сеанса Hibernate из EntityManager? Я хочу получить доступ к некоторому API-интерфейсу hibernate...

Я уже пробовал что-то вроде:

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

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

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

4b9b3361

Ответ 1

Bozho и partenon верны, но:

В JPA 2 предпочтительным механизмом является entityManager.unwrap(класс)

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

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

Ответ 2

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

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

Ответ 3

Проще, чем:

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

Ответ 4

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

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