从JPA的entityManagerFactory获取Hibernate SessionFactory

时间:2013-09-26 13:44:15

标签: hibernate jpa

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

4 个答案:

答案 0 :(得分:30)

选项1至EntityManagerFactory

如果您使用Hibernate >= 4.3JPA 2.1,则可以从SessionFactoryEntityManagerFactory加入<T> T EntityManagarFactory#unwrap(Class<T> cls)

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

选项2到EntityManager

如果您使用Hibernate >= 4.3JPA >= 2.0,则可以从SessionEntityManager加入<T> T EntityManagar#unwrap(Class<T> cls)。从Session,您可以获得SessionFactory

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

答案 1 :(得分:9)

尝试将EntityManagerFactory投射到HibernateEntityManagerFactory

由于EntityManagerFactory不支持unwrap()(与EntityManager不同),因此它似乎是实现目标的唯一途径。

答案 2 :(得分:7)

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

答案 3 :(得分:0)