Tamamen kapsamlı olmak gerekirse, bir JPA 1.0 veya JPA 2.0 uygulaması kullanıyorsanız işler farklıdır.
JPA 1.0
JPA 1.0 ile kullanmanız gerekir EntityManager#getDelegate()
. Ancak , bu yöntemin sonucunun uygulamaya özgü olduğunu, yani Hibernate kullanan uygulama sunucusundan diğerine taşınamayacağını unutmayın. Örneğin JBoss ile şunları yaparsınız:
org.hibernate.Session session = (Session) manager.getDelegate();
Ancak GlassFish ile yapmanız gerekenler:
org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
Kabul ediyorum, bu korkunç ve şartname burada suçlu (yeterince açık değil).
JPA 2.0
JPA 2.0 ile, yeni uygulamalar için EntityManager#unwrap(Class<T>)
tercih edilecek yeni (ve çok daha iyi) bir yöntem var EntityManager#getDelegate()
.
Dolayısıyla, JPA 2.0 uygulaması olarak Hibernate ile (bkz. 3.15. Native Hibernate API ) şunları yaparsınız:
Session session = entityManager.unwrap(Session.class);
((EntityManagerImpl)em).getSession();