sto*_*ter 100 java hibernate jpa hibernate-entitymanager
我有
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria( ??? ).list();
}
Run Code Online (Sandbox Code Playgroud)
如果我使用entitymanager,我如何检索会话?如何从我的detachedcriteria获得结果?
Pas*_*ent 171
要完全详尽,如果您使用JPA 1.0或JPA 2.0实现,情况会有所不同.
使用JPA 1.0,您必须使用EntityManager#getDelegate().但请记住, 此方法的结果是特定于实现的,即从使用Hibernate到另一个的应用程序服务器不可移植.例如,使用JBoss,您可以:
org.hibernate.Session session = (Session) manager.getDelegate();
Run Code Online (Sandbox Code Playgroud)
但是使用GlassFish,你必须这样做:
org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
Run Code Online (Sandbox Code Playgroud)
我同意,这太可怕了,这里的规格应该归咎于(不够清楚).
使用JPA 2.0,有一种新的(并且更好)EntityManager#unwrap(Class<T>)方法比EntityManager#getDelegate()新应用程序更受欢迎.
因此,使用Hibernate作为JPA 2.0实现(参见3.15.Native Hibernate API),您可以:
Session session = entityManager.unwrap(Session.class);
Run Code Online (Sandbox Code Playgroud)
Vla*_*nov 37
请参阅" Hibernate ORM用户指南 "中的" 5.1.从JPA访问Hibernate API "部分:
Session session = entityManager.unwrap(Session.class);
Run Code Online (Sandbox Code Playgroud)
小智 5
这将更好地解释。
EntityManager em = new JPAUtil().getEntityManager();
Session session = em.unwrap(Session.class);
Criteria c = session.createCriteria(Name.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106361 次 |
| 最近记录: |