23

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

4

4 回答 4

46

选项 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你可以访问SessionEntityManagerthrough <T> T EntityManagar#unwrap(Class<T> cls)Session您可以从SessionFactory.

Session session = entityManager.unwrap(Session.class);
SessionFactory sessionFactory = session.getSessionFactory();
于 2016-07-21T14:02:06.640 回答
9

尝试投射EntityManagerFactoryHibernateEntityManagerFactory.

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

于 2013-09-26T14:07:15.970 回答
7

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

于 2014-06-28T14:11:12.810 回答
0

我通过注入解决了它,像这样定义bean http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-session-factory-setup

于 2013-09-26T20:02:31.180 回答