पूरी तरह से संपूर्ण होने के लिए, यदि आप JPA 1.0 या JPA 2.0 कार्यान्वयन का उपयोग कर रहे हैं तो चीजें अलग हैं।
जेपीए 1.0
JPA 1.0 के साथ, आपको उपयोग करना होगा EntityManager#getDelegate()
। लेकिन ध्यान रखें कि इस पद्धति का परिणाम हाइबरनेट का उपयोग करके दूसरे सर्वर के लिए विशिष्ट यानी गैर पोर्टेबल कार्यान्वयन है । JBoss के साथ उदाहरण के लिए आप क्या करेंगे:
org.hibernate.Session session = (Session) manager.getDelegate();
लेकिन GlassFish के साथ , आपको करना होगा:
org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
मैं सहमत हूँ, यह भयानक है, और कल्पना यहाँ दोष देने के लिए है (पर्याप्त स्पष्ट नहीं)।
जेपीए 2.0
JPA 2.0 के साथ, एक नया (और बहुत बेहतर) EntityManager#unwrap(Class<T>)
तरीका है जिसे EntityManager#getDelegate()
नए अनुप्रयोगों के लिए प्राथमिकता दी जानी है ।
तो Jiber 2.0 के कार्यान्वयन के रूप में हाइबरनेट के साथ ( 3.15 देखें । मूल हाइबरनेट API ), आप ऐसा करेंगे:
Session session = entityManager.unwrap(Session.class);
((EntityManagerImpl)em).getSession();