2010-12-02 11 views
18

का उपयोग कर ईजेबी से हाइबरनेट सत्र तक पहुंचना क्या EntityManager से हाइबरनेट सत्र ऑब्जेक्ट प्राप्त करना संभव है? मैं का उपयोग करने के कुछ विशिष्ट एपीआई हाइबरनेट चाहते हैं ...EntityManager

मैं पहले से ही की तरह कुछ करने की कोशिश की:

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

लेकिन जैसे ही मैं EJB मैं "पर एक मंगलाचरण के दौरान एक प्रणाली अपवाद घटित में एक विधि आह्वान के रूप में एक NullPointerException साथ EJB "

मैं उपयोग glassfish 3.0.1

उत्तर

26

Bozho और partenon सही हैं, लेकिन:

जेपीए 2 में, वरीय तंत्र है entityManager.unwrap(class)

HibernateEntityManager hem = em.unwrap(HibernateEntityManager.class); 
Session session = hem.getSession(); 

मैं अपने अपवाद के कारण होता है लगता है क्योंकि आप एक कार्यान्वयन वर्ग के लिए कास्ट करने के लिए (शायद कोशिश कर रहे हैं आप एक जेडीके प्रॉक्सी से निपट रहे थे)। एक इंटरफ़ेस पर कास्ट करें, और सब कुछ ठीक होना चाहिए (जेपीए 2 संस्करण में, कोई कास्टिंग की आवश्यकता नहीं है)।

+0

नए तंत्र – Bozho

+4

के लिए +1 भी बेहतर रूप में http://stackoverflow.com/questions/ यहाँ @Pascal Thivent द्वारा समझाया 34 9 34 9 5/डेटाबेस-कनेक्शन-इन-शुद्ध-जेपीए-सेटअप में आप 'em.unwrap (सत्र.क्लास) का उपयोग कर सकते हैं। –

6

के रूप में सरल रूप में:

Session session = (Session) em.getDelegate(); 
6

अपने EntityManager अगर ठीक से (@PersistenceContext का प्रयोग करके) इंजेक्शन और अशक्त नहीं है है, तो निम्न कार्य करना चाहिए:

org.hibernate.Session hSession = (Session) em.getDelegate(); 
11

हाइबरनेट EntityManager डॉक्स से, यह ऐसा करने का पसंदीदा तरीका है:

Session session = entityManager.unwrap(Session.class); 
संबंधित मुद्दे