ich habe
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria("....").list();
}
Wie kann ich die Sitzung abrufen, wenn ich Entity Manager verwende, oder wie kann ich das Ergebnis aus meinen getrennten Kriterien abrufen?
java
hibernate
jpa
hibernate-entitymanager
Storm_Buster
quelle
quelle
((EntityManagerImpl)em).getSession();
Antworten:
Um vollständig zu sein, sind die Dinge anders, wenn Sie eine JPA 1.0- oder eine JPA 2.0-Implementierung verwenden.
JPA 1.0
Mit JPA 1.0 müssten Sie verwenden
EntityManager#getDelegate()
. Beachten Sie jedoch, dass das Ergebnis dieser Methode implementierungsspezifisch ist, dh nicht vom Anwendungsserver mithilfe des Ruhezustands auf den anderen portierbar ist. Zum Beispiel würden Sie mit JBoss Folgendes tun:Aber mit GlassFish müssten Sie Folgendes tun:
Ich stimme zu, das ist schrecklich, und die Spezifikation ist hier schuld (nicht klar genug).
JPA 2.0
Mit JPA 2.0 gibt es eine neue (und viel bessere)
EntityManager#unwrap(Class<T>)
Methode, dieEntityManager#getDelegate()
für neue Anwendungen vorzuziehen ist .Mit Hibernate als JPA 2.0-Implementierung (siehe 3.15. Native Hibernate API ) würden Sie also Folgendes tun:
quelle
entityManager.unwrap(Session.class);
Was istSession
inSession.class
? ist es ein Import?org.eclipse.persistence.sessions.Session
Weitere Informationen finden Sie im Abschnitt " 5.1. Zugriff auf Hibernate-APIs über JPA " im Hibernate ORM-Benutzerhandbuch :
quelle
entityManager.unwrap(Session.class);
Was istSession
inSession.class
? ist es ein Import?Dies wird besser erklären.
quelle
'entityManager.unwrap (Session.class)' wird verwendet, um eine Sitzung von EntityManager abzurufen.
Link zur Demo-Anwendung .
quelle
Ich habe in Wildfly gearbeitet, aber ich habe verwendet
und das richtige war
quelle