2011-11-17 10 views
6

मैं अपनी परियोजना के लिए जेपीए और हाइबरनेट का उपयोग करता हूं। मेरे पास के साथ दो वर्ग हैं लेकिन विभिन्न पैकेज में। वे हैं:जेपीए एक ही नाम के साथ दो वर्गों को कैसे पहचान सकता है लेकिन विभिन्न पैकेजों में?

@Entity(name = "X_USER") 
@Table(name = "X_USER") 
public class User { 

और:

@Entity 
@Table(name="Y_USER") 
public class User { 

मैं साथ एक खोज क्वेरी बनाने गया था: .getSimpleName() लेकिन यह काम नहीं किया क्योंकि उनके सरल नाम एक ही हैं। मैंने इसे .getName() में बदल दिया।

हालांकि, यह अभी भी User पर वापस आने के लिए भ्रमित है।

संपादित करें:

मेरे पास है:

SELECT_BY_PROPERTY_QUERY = "SELECT p FROM :CLASS: p WHERE p.:PROPNAME:=?"; 

और मुझे लगता है कि:

SELECT_BY_PROPERTY_QUERY.replaceFirst(":CLASS:", clazz.getName()).replaceFirst(":PROPNAME:", propertyName); 

और जब मैं यह डिबग यह कुछ ऐसा बना देता है:

Select p from User p Where p.name=? 

यह अभी भी User है और इसमें पैकेज जानकारी शामिल नहीं है और मुझे गलत User कक्षा देता है।

+2

'getName()' को FQN लौटाया जाना चाहिए। आप क्या त्रुटि प्राप्त कर रहे हैं? –

+0

@ XaviLópez मैंने अपना प्रश्न संपादित किया है। – kamaci

उत्तर

4

यदि आप एक जेपीक्यूएल क्वेरी बनाना चाहते हैं तो आपको इकाई का नाम पास करना होगा। जैसा कि आपने पोस्ट किया है, आपके पास 2 इकाइयां हैं जिन्हें समान जावा क्लास द्वारा दर्शाया गया है, लेकिन अलग इकाई का नाम (X_USER स्पष्ट रूप से आपके द्वारा सेट किया गया है और User निहित रूप से सेट है)।

आप गतिशील इकाई आप बल्कि Metamodel का उपयोग करना चाहिए के नाम प्राप्त करना चाहते हैं, तो यह काम करना चाहिए की तरह कुछ (चयनित नहीं):

EntityManager em = ... 
Metamodel model = em.getEntityManagerFactory().getMetamodel(); 
String entityName = model.entity(com.your.pckg.User.class).getName(); 

HTH।

संबंधित मुद्दे

 संबंधित मुद्दे