2010-11-27 21 views
7

मैं ऐसी स्थिति में हूं जहां मुझे रनटाइम पर EntityManager का यूनिट नाम निर्धारित करने की आवश्यकता है।जब आप इकाई नाम के बारे में अनिश्चित हैं तो आप EntityManager कैसे बनाते हैं?

उदाहरण के लिए, मैं इस तरह कुछ करने के लिए करना चाहते हैं:

@PersistenceContext(unitName = findAppropriateJdbcName()) 
EntityManager entityManager; 

हालांकि, इस एनोटेशन के साथ संभव नहीं है।

क्या एंटिटी मैनेजर बनाना संभव है जब आप सुनिश्चित नहीं करते कि यूनिट का नाम रन टाइम तक क्या है?

उत्तर

7

रनटाइम पर दृढ़ता इकाई (पीयू) नाम निर्दिष्ट करना संभव है, लेकिन यह EntityManagerFactory के निर्माण में उपयोग किया जाने वाला पैरामीटर है, व्यक्तिगत EntityManager नहीं। Persistence कक्षा विधि createEntityManagerFactory() के लिए Javadoc देखें। उदाहरण:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitname); 
EntityManager em = emf.createEntityManager(); 
// ... 

मैं एक गैर जावा ईई एप्लिकेशन में करते (जावा 6 एसई का उपयोग कर एक बिलाव द्वारा किया गया वेब अनुप्रयोग में कॉल) लेकिन मुझे यकीन है कि कैसे आप एक कंटेनर से प्रबंधित में ऐसा ही करते नहीं कर रहा हूँ जावा ईई 6 आवेदन। हो सकता है।

3

यहां आपको जेएनडीआई के माध्यम से एनोटेशन का उपयोग किये बिना मैन्युअल रूप से इकाई प्रबंधक बनाना होगा ताकि इसे रनटाइम पर अलग-अलग निरंतर इकाई पर इंगित किया जा सके।

public EntityManager initializeEM(String pUnitName){ 

Context iCtx = new InitialContext(); 
String lookUpString = "java:comp/env/persistence/"+pUnitName; 
javax.persistence.EntityManager entityManager = 
       (javax.persistence.EntityManager)iCtx.lookup(lookUpString); 

return entityManager; 
} 
संबंधित मुद्दे