我需要 Hibernate 的一个特定功能,即 StatelessSession,为此我需要 Hibernate 的 SessionFactory。问题是我只有 entityManagerFactory。在这种情况下如何获得 StatelessSession?
4 回答
选项 1 通过EntityManagerFactory
如果您使用Hibernate >= 4.3
并且JPA 2.1
您可以SessionFactory
从 aEntityManagerFactory
到<T> T EntityManagarFactory#unwrap(Class<T> cls)
.
SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
选项 2 通过EntityManager
如果你使用Hibernate >= 4.3
然后JPA >= 2.0
你可以访问Session
从EntityManager
through <T> T EntityManagar#unwrap(Class<T> cls)
。Session
您可以从SessionFactory
.
Session session = entityManager.unwrap(Session.class);
SessionFactory sessionFactory = session.getSessionFactory();
尝试投射EntityManagerFactory
到HibernateEntityManagerFactory
.
由于EntityManagerFactory
不支持unwrap()
(与 不同EntityManager
),它似乎是实现目标的唯一方法。
Hibernate >= 4.3 支持 JPA 2.1。所以你可以像 emf.unwrap(SessionFactory.class) 这样使用 EntityManagerFactory.unwrap 。
我通过注入解决了它,像这样定义bean http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-session-factory-setup