Доступ к Hibernate Session из EJB с помощью EntityManager - PullRequest
18 голосов
/ 02 декабря 2010

Можно ли получить объект Hibernate Session из EntityManager?Я хочу получить доступ к некоторому специфичному для hibernate API ...

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

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

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

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

Ответы [ 4 ]

26 голосов
/ 02 декабря 2010

Божо и партенон верны, но:

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

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

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

12 голосов
/ 29 февраля 2012

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

Session session = entityManager.unwrap(Session.class);
6 голосов
/ 02 декабря 2010

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

org.hibernate.Session hSession = (Session) em.getDelegate();
6 голосов
/ 02 декабря 2010

Так же просто, как:

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