我如何获得会话对象,如果我有entitymanager
我有
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。本机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);
- Hibernate – cascade =“all-delete-orphan”的集合不再被拥有的实体实例引用
- hibernate与JPA与JDO – 每个的利弊?
- Hibernate 3.5中的JPA 2.0 @OrderColumn注释
- 如何在JPA中复制Hibernate的saveOrUpdate?
- 使用@Query使用hibernate更新spring数据jpa中的布尔值
- 为Hibernate表和列自动保留字转义
- Spring Security 3使用Hibernate进行数据库validation
- Hibernate显示真正的SQL
- 在基于hibernate的应用程序中,我应该包含哪些jar以使用javax.persistence包?