mam
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria("....").list();
}
Jak mogę pobrać sesję, jeśli korzystam z uprawnionego menedżera lub jak mogę uzyskać wynik z moich odłączonych kryteriów?
java
hibernate
jpa
hibernate-entitymanager
Storm_buster
źródło
źródło
((EntityManagerImpl)em).getSession();
Odpowiedzi:
Aby być całkowicie wyczerpującym, sytuacja wygląda inaczej, jeśli używasz implementacji JPA 1.0 lub JPA 2.0.
JPA 1.0
W przypadku JPA 1.0 musiałbyś użyć
EntityManager#getDelegate()
. Należy jednak pamiętać, że wynik tej metody jest specyficzny dla implementacji, tj. Nieprzenośny z serwera aplikacji za pomocą Hibernacji do drugiego. Na przykład z JBossem zrobiłbyś:Ale w przypadku GlassFish musisz zrobić:
Zgadzam się, to okropne, a specyfika jest tutaj winna (nie dość jasne).
JPA 2.0
W przypadku JPA 2.0 istnieje nowa (i znacznie lepsza)
EntityManager#unwrap(Class<T>)
metoda, którą należy preferować wEntityManager#getDelegate()
przypadku nowych aplikacji.Tak więc z Hibernate jako implementacją JPA 2.0 (patrz 3.15. Native Hibernate API ), powinieneś:
źródło
entityManager.unwrap(Session.class);
co jestSession
wSession.class
środku czy to jest import?org.eclipse.persistence.sessions.Session
Zobacz sekcję „ 5.1. Dostęp do interfejsów API Hibernate z JPA ” w Podręczniku użytkownika Hibernate ORM :
źródło
entityManager.unwrap(Session.class);
co jestSession
wSession.class
środku czy to jest import?To lepiej wyjaśni.
źródło
„entityManager.unwrap (Session.class)” jest używany do pobierania sesji z EntityManager.
Link do aplikacji demonstracyjnej .
źródło
Pracowałem w Wildfly, ale korzystałem
a poprawna była
źródło