为了完全详尽无遗,如果您使用的是JPA 1.0或JPA 2.0实现,则情况有所不同。
JPA 1.0
对于JPA
1.0,您必须使用
EntityManager#getDelegate()。但是请记住,
此方法的结果是特定 于 实现的,
即从使用Hibernate的应用程序服务器到其他服务器之间不可移植。例如,使用JBoss,您可以执行以下操作:
org.hibernate.Session session = (Session) manager.getDelegate();
但是,使用GlassFish,您需要执行以下操作:
org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
我同意,这太可怕了,规范归咎于这里(还不够清楚)。
JPA 2.0
使用JPA
2.0,有一种新的(并且更好)的
EntityManager#unwrap(Class<T>)方法比
EntityManager#getDelegate()新应用程序更受青睐。
因此,使用Hibernate作为JPA 2.0实现(请参见3.15。本机Hibernate
API),您将执行以下操作:
Session session = entityManager.unwrap(Session.class);



