Получить Hibernate SessionFactory из JPA entityManagerFactory

Мне нужна конкретная функция спящего режима, которая является StatelessSession, и для этого мне нужно Hibernate SessionFactory. Проблема в том, что у меня есть только entityManagerFactory. Как я могу получить StatelessSession в этом сценарии?

Ответ 2

Вариант 1 через EntityManagerFactory

Если вы используете Hibernate >= 4.3 и JPA 2.1 вы можете передать SessionFactory из EntityManagerFactory через <T> T EntityManagarFactory#unwrap(Class<T> cls).

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);

Вариант 2 через EntityManager

Если вы используете Hibernate >= 4.3 и JPA >= 2.0 вы можете перехватить Session из EntityManager через <T> T EntityManagar#unwrap(Class<T> cls). С Session вы можете получить SessionFactory.

Session session = entityManager.unwrap(Session.class);
SessionFactory sessionFactory = session.getSessionFactory();

Ответ 3

Попробуйте EntityManagerFactory в HibernateEntityManagerFactory.

Поскольку EntityManagerFactory не поддерживает unwrap() (в отличие от EntityManager), это, по-видимому, единственный способ достичь вашей цели.

Ответ 4

Hibernate> = 4.3 поддерживает JPA 2.1. Таким образом, вы можете использовать EntityManagerFactory.unwrap, например emf.unwrap(SessionFactory.class).