【发布时间】:2018-08-10 23:43:38
【问题描述】:
我需要 Hibernate 的一个特定功能 StatelessSession,为此我需要 Hibernate 的 SessionFactory。问题是我只有 entityManagerFactory。在这种情况下如何获得 StatelessSession?
【问题讨论】:
我需要 Hibernate 的一个特定功能 StatelessSession,为此我需要 Hibernate 的 SessionFactory。问题是我只有 entityManagerFactory。在这种情况下如何获得 StatelessSession?
【问题讨论】:
选项 1 到 EntityManagerFactory
如果您使用Hibernate >= 4.3 和JPA 2.1,您可以从EntityManagerFactory 到<T> T EntityManagarFactory#unwrap(Class<T> cls) 访问SessionFactory。
SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
选项 2 至 EntityManager
如果您使用Hibernate >= 4.3 和JPA >= 2.0,那么您可以从EntityManager 到<T> T EntityManagar#unwrap(Class<T> cls) 访问Session。从Session你可以得到SessionFactory。
Session session = entityManager.unwrap(Session.class);
SessionFactory sessionFactory = session.getSessionFactory();
【讨论】:
尝试将EntityManagerFactory 转换为HibernateEntityManagerFactory。
由于EntityManagerFactory 不支持unwrap()(与EntityManager 不同),它似乎是实现目标的唯一方法。
【讨论】:
EntityManageFactory 现在提供了一个 unwrap() 方法。
Hibernate >= 4.3 支持 JPA 2.1。所以你可以像 emf.unwrap(SessionFactory.class) 这样使用 EntityManagerFactory.unwrap。
【讨论】:
【讨论】: