从JPA的entityManagerFactory获取Hibernate SessionFactory

ibr*_*ker 20 hibernate jpa

我需要一个特殊的hibernate特性,即StatelessSession,为此我需要Hibernate的SessionFactory.问题是我只有entityManagerFactory.如何在这种情况下获得StatelessSession?

Pau*_*ski 32

选项1到 EntityManagerFactory

如果你使用Hibernate >= 4.3,JPA 2.1你可以SessionFactory从一个EntityManagerFactory通过<T> T EntityManagarFactory#unwrap(Class<T> cls).

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
Run Code Online (Sandbox Code Playgroud)

选项2到 EntityManager

如果你使用Hibernate >= 4.3JPA >= 2.0那么你就可以accces了SessionEntityManager通过<T> T EntityManagar#unwrap(Class<T> cls).从Session你可以获得SessionFactory.

Session session = entityManager.unwrap(Session.class);
SessionFactory sessionFactory = session.getSessionFactory();
Run Code Online (Sandbox Code Playgroud)


axt*_*avt 9

试着投EntityManagerFactoryHibernateEntityManagerFactory.

既然EntityManagerFactory不支持unwrap()(不像EntityManager),它似乎是实现目标的唯一途径.


Chr*_*der 7

Hibernate> = 4.3支持JPA 2.1.所以你可以在那里使用像emf.unwrap(SessionFactory.class)这样的EntityManagerFactory.unwrap.