如果我有实体管理器,我如何获得会话对象

我有
private EntityManager em;

public List getAll(DetachedCriteria detachedCriteria)   {

    return detachedCriteria.getExecutableCriteria( ??? ).list();
}
如果使用entitymanager,我如何检索会话?如何从我的detachedcriteria获取结果?     
已邀请:
要完全详尽,如果您使用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.Native Hibernate API),您可以:
Session session = entityManager.unwrap(Session.class);
    
请参阅“Hibernate ORM用户指南”中的“5.1。从JPA访问Hibernate API”部分:
Session session = entityManager.unwrap(Session.class);
    
这将更好地解释。
EntityManager em = new JPAUtil().getEntityManager();
Session session = em.unwrap(Session.class);
Criteria c = session.createCriteria(Name.class);
    

要回复问题请先登录注册