Frage

Ich habe

private EntityManager em;

public List getAll(DetachedCriteria detachedCriteria)   {

    return detachedCriteria.getExecutableCriteria( ??? ).list();
}

Wie kann ich rufe Sie die Sitzung, wenn am EntityManager verwenden oder wie kann ich das Ergebnis von meinem DetachedCriteria bekommen?

War es hilfreich?

Lösung

Um völlig erschöpfend sein, die Dinge anders, wenn Sie eine JPA 1.0 oder eine JPA 2.0-Implementierung verwenden.

JPA 1.0

Mit JPA 1.0, dann würden Sie verwenden müssen EntityManager#getDelegate() . Aber bedenken Sie, dass das Ergebnis dieser Methode ist die Umsetzung spezifischer das heißt nicht tragbar vom Anwendungsserver mit Hibernate auf der anderen Seite. Zum Beispiel mit JBoss Sie tun würden:

org.hibernate.Session session = (Session) manager.getDelegate();

Aber mit Glassfish , Sie würden zu tun haben:

org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession(); 

Ich bin damit einverstanden, das ist schrecklich, und die Spezifikation ist hier verantwortlich zu machen (nicht klar genug).

JPA 2.0

Mit JPA 2.0 gibt es eine neue (und viel besser) EntityManager#unwrap(Class<T>) Methode, die EntityManager#getDelegate() für neue Anwendungen.

So mit Hibernate als JPA 2.0-Implementierung (siehe 3.15 india Hibernate API ), würden Sie tun.

Session session = entityManager.unwrap(Session.class);

Andere Tipps

Siehe Abschnitt " 5.1. Zugriff auf Hibernate APIs von JPA " in der Hibernate ORM Benutzerhandbuch :

Session session = entityManager.unwrap(Session.class);

Dies wird besser erklären.

EntityManager em = new JPAUtil().getEntityManager();
Session session = em.unwrap(Session.class);
Criteria c = session.createCriteria(Name.class);

Ich war in Wildfly arbeiten, aber ich wurde mit

org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();

und die richtige war

org.hibernate.Session session = (Session) manager.getDelegate();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top