2010-11-23 13 views
6

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

@javax.persistence.Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@NamedQueries({ 
    @NamedQuery(name=Parent.QUERY_FIND_ALL, query="SELECT p FROM Parent p") 
}) 
public class Parent { 
     // the class code follows here 
} 

@javax.persistence.Entity 
@NamedQueries({ 
    @NamedQuery(name=Child.QUERY_FIND_ALL, query="SELECT c FROM Child c") 
}) 

public class Child extends Parent { 
     // the class code follows here 
} 

समस्या उपयोग कर रहा हूँ कि अब मैं केवल माता पिता वर्ग की प्रविष्टियां प्राप्त करना चाहते हैं। लेकिन नामित क्वेरी के साथ "पेरेंट पी से चुनें पी" भी बाल तालिका से सभी प्रविष्टियां लौटा दी जाती हैं।

का चयन करें या खोजने के कोड इस प्रकार है:

public List findWithNamedQuery(String query) { 
     return em.createNamedQuery(query).getResultList(); 
} 

इस प्रकार क्वेरी अर्थात "जनक पी से पी का चयन करें" है।

मैं वास्तव में केवल मूल प्रविष्टियों को कैसे प्राप्त कर सकता हूं और इस विरासत पदानुक्रम की सभी प्रविष्टियों को नहीं?

संक्षेप में: मैं सभी बाल प्रविष्टियों को बिना छूटे हुए कैसे छोड़ सकता हूं, और केवल मूल प्रविष्टियों को वापस कर सकता हूं?

संपादित करें 1:
मैं EclipseLink 2.0.1 का उपयोग कर रहा है, लेकिन हर बार जब मैं प्रकार अभिव्यक्ति के माध्यम से axtavt के समाधान का प्रयास करें, मैं निम्नलिखित त्रुटि मिलती है:

"Invalid Type Expression on [my.domain.Parent]. The class does not have a descriptor, or a descriptor that does not use inheritance or uses a ClassExctractor for inheritance". 

मैं भी नवीनीकृत किया है EclipseLink के नवीनतम स्थिर संस्करण 2.1.1 में, लेकिन यह समस्या का समाधान नहीं करता है।

+1

क्या आपने कभी यह पता लगाया है? मैं वही काम करने की कोशिश कर रहा हूं। मेरी पूछताछ के लिए मैं केवल माता-पिता पंक्तियों को वापस करना चाहता हूं लेकिन बाल पंक्तियां भी लौटा दी जाती हैं। –

+0

इस प्रश्न पर कोई अपडेट? मेरा मतलब है कि आपने कभी इस @gryry के लिए जवाब पा लिया है –

उत्तर

4

TABLE_PER_CLASS विरासत के साथ संयोजन में टाइप अभिव्यक्ति नहीं करता है 'EclipseLink 2.1.1 के तहत काम नहीं लिख सकते हैं, यह एक बग हो रहा है।

JPA 2.0: TYPE expression exception

8

EclipseLink के अपने संस्करण जेपीए 2.0 का समर्थन करता है, तो आप

SELECT p FROM Parent p WHERE TYPE(p) = Parent 
संबंधित मुद्दे