saya sudah
private EntityManager em;
public List getAll(DetachedCriteria detachedCriteria) {
return detachedCriteria.getExecutableCriteria("....").list();
}
Bagaimana saya bisa mengambil sesi jika saya menggunakan manajer entitas atau bagaimana saya bisa mendapatkan hasil dari kriteria saya yang terpisah?
java
hibernate
jpa
hibernate-entitymanager
storm_buster
sumber
sumber
((EntityManagerImpl)em).getSession();
Jawaban:
Untuk menjadi lengkap, semuanya berbeda jika Anda menggunakan implementasi JPA 1.0 atau JPA 2.0.
JPA 1.0.2
Dengan JPA 1.0, Anda harus menggunakan
EntityManager#getDelegate()
. Namun perlu diingat bahwa hasil dari metode ini adalah implementasi spesifik yaitu non portable dari server aplikasi yang menggunakan Hibernate ke yang lain. Misalnya dengan JBoss Anda akan melakukan:Tetapi dengan GlassFish , Anda harus melakukan:
Saya setuju, itu mengerikan, dan spek yang harus disalahkan di sini (tidak cukup jelas).
JPA 2.0
Dengan JPA 2.0, ada metode baru (dan jauh lebih baik)
EntityManager#unwrap(Class<T>)
yang lebih disukai daripadaEntityManager#getDelegate()
untuk aplikasi baru.Jadi dengan implementasi Hibernate as JPA 2.0 (lihat 3.15. Native Hibernate API ), Anda akan melakukan:
sumber
entityManager.unwrap(Session.class);
apa yangSession
diSession.class
? apakah ini impor?org.eclipse.persistence.sessions.Session
Lihat bagian " 5.1. Mengakses API Hibernate dari JPA " di Panduan Pengguna Hibernate ORM :
sumber
entityManager.unwrap(Session.class);
apa yangSession
diSession.class
? apakah ini impor?Ini akan menjelaskan lebih baik.
sumber
'entityManager.unwrap (Session.class)' digunakan untuk mendapatkan sesi dari EntityManager.
Tautan Aplikasi Demo .
sumber
Saya bekerja di Wildfly tetapi saya menggunakan
dan yang benar adalah
sumber