我需要一个特殊的hibernate功能,即StatelessSession,为此我需要Hibernate的SessionFactory。问题是我只有entityManagerFactory。如何在这种情况下获得StatelessSession?
答案 0 :(得分:30)
选项1至EntityManagerFactory
如果您使用Hibernate >= 4.3
和JPA 2.1
,则可以从SessionFactory
到EntityManagerFactory
加入<T> T EntityManagarFactory#unwrap(Class<T> cls)
。
SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
选项2到EntityManager
如果您使用Hibernate >= 4.3
和JPA >= 2.0
,则可以从Session
到EntityManager
加入<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)