2012-05-24 13 views
24

क्या मानदंड एपीआई में पैरामीटर सूची का उपयोग करने की संभावना है। अभिव्यक्ति?जेपीए मानदंड एपीआई अभिव्यक्ति पैरामीटर सूची

List<Long> list = new ArrayList<Long>(); 
    list.add((long)1); 
    list.add((long)2); 
    list.add((long)3); 


CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Bewerbung> criteriaQuery = cb.createQuery(Bewerbung.class); 
Root<Bewerbung> bewerbung = criteriaQuery.from(Bewerbung.class); 

criteriaQuery.select(bewerbung).where(
cb.in(bewerbung.get(Bewerbung_.bewerberNummer)).value(list); 

return em.createQuery(criteriaQuery).getResultList(); 

अभिव्यक्ति .value(list) रूप value() प्रकार लंबे समय तक नहीं एक सूची के पैरामीटर को उम्मीद कर रही है काम नहीं करता:

मैं कुछ इस तरह की है। मेरे मामले में एक सबक्वायरी का उपयोग करना संभव नहीं है। क्या कोई इस मुद्दे पर मेरी सहायता कर सकता है?

उत्तर

29
cb.isTrue(bewerbung.get(Bewerbung_.bewerberNummer).in(list)); 

चाल, AFAIK करना चाहिए।

+0

बढ़िया है, धन्यवाद इस काम करता है, लेकिन मैं हाइबरनेट उपयोग कर रहा हूँ और ऐसा लगता है कि हाइबरनेट विधि पैरामीटर "में" javax.persistence.criteria.Expression के पैरामीटर के रूप में खाली संग्रह का समर्थन नहीं करता। Http://lists.jboss.org/pipermail/hibernate-issues/2011- दिसम्बर/035927.html – user1414341

+0

AFAIK देखें, कोई भी उनका समर्थन नहीं करता है। यदि रिक्त सूची को तर्क के रूप में पास किया जाता है तो आपको शायद क्वेरी को शॉर्ट-सर्किट करना चाहिए। –

+0

मुझे यह अभिव्यक्ति मिली है (isTrue में लपेटा गया है) EclipseLink 2.6.2 में अपवाद PREDICATE_PASSED_TO_EVALUATION बढ़ाता है लेकिन बिना किसी ट्रू रैपिंग मेरे उदाहरण में भविष्यवाणी के रूप में सही काम करता है क्योंकि शायद "इन" भविष्यवाणी ऑब्जेक्ट के साथ रिटर्न करता है। –

31

CriteriaBuilder#isTrue का उपयोग करने की कोई आवश्यकता नहीं है। यह पर्याप्त होना चाहिए:

criteriaQuery.select(bewerbung) 
      .where(bewerbung.get(Bewerbung_.bewerberNummer) 
      .in(list)); 
+0

"कोई ज़रूरत नहीं" के बजाय मैं कहूंगा "जरूरी नहीं"। कम से कम EclipseLink 2.6.2 का उपयोग कर सुनिश्चित करें। मैंने परीक्षण किया है –

+0

@MiklosKrivan अच्छी तरह से, दोनों काम करना चाहिए, यह सिर्फ मुझे स्पष्ट लग रहा है। – jFrenetic

+0

मैं उम्मीद करता हूं कि दुर्भाग्य से ओआरएम के लिए एक्लिप्ससेंक 2.6.2 का उपयोग करके (मैंने दोनों सूत्रों को आजमाया है) isTrue() रैपिंग उल्लिखित अपवाद उठाता है। यही कारण है कि मेरे शब्द सुझाव दिया गया। तो सैद्धांतिक रूप से "कोई ज़रूरत नहीं है" लेकिन व्यावहारिक रूप से "नहीं होना चाहिए"। –

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