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

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

मेरे पास ऐसा कुछ है:

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


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

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

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

अभिव्यक्ति .value (सूची) value() के रूप में काम नहीं करती है, एक सूची के लंबे समय तक एक पैरामीटर की अपेक्षा नहीं कर रही है। मेरे मामले में एक सबक्वायरी का उपयोग करना संभव नहीं है। क्या कोई इस मुद्दे पर मेरी मदद कर सकता है?

0
जोड़ा संपादित
विचारों: 1

2 उत्तर

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

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

0
जोड़ा
बढ़िया, धन्यवाद यह काम करता है, लेकिन मैं हाइबरनेट का उपयोग कर रहा हूं और ऐसा लगता है कि हाइबरनेट खाली संग्रह को javax.persistence.criteria.Expression "in" विधि पैरामीटर के पैरामीटर के रूप में समर्थन नहीं करता है। list.jboss.org/pipermail/hibernate-issues/2011 देखें -December/& hellip;
जोड़ा लेखक user1414341, स्रोत
AFAIK, कोई भी उनका समर्थन करता है। यदि रिक्त सूची को तर्क के रूप में पास किया जाता है तो आपको शायद क्वेरी को शॉर्ट-सर्किट करना चाहिए।
जोड़ा लेखक JB Nizet, स्रोत
@JBNizet बहुत बहुत धन्यवाद
जोड़ा लेखक ozgur, स्रोत
मुझे यह अभिव्यक्ति मिली है (isTrue में लपेटा गया है) EclipseLink 2.6.2 में अपवाद PREDICATE_PASSED_TO_EVALUATION बढ़ाता है लेकिन बिना किसी ट्रू रैपिंग मेरे उदाहरण में भविष्यवाणी के रूप में सही काम करता है क्योंकि शायद "इन" भविष्यवाणी ऑब्जेक्ट के साथ रिटर्न करता है।
जोड़ा लेखक Miklos Krivan, स्रोत

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

criteriaQuery.select(bewerbung)
             .where(bewerbung.get(Bewerbung_.bewerberNummer)
             .in(list));
0
जोड़ा
@MiklosKrivan अच्छी तरह से, दोनों काम करना चाहिए, यह सिर्फ मुझे स्पष्ट लग रहा है।
जोड़ा लेखक jFrenetic, स्रोत
@MiklosKrivan को जांचना होगा, स्पष्टीकरण के लिए धन्यवाद।
जोड़ा लेखक jFrenetic, स्रोत
@MiklosKrivan, कृपया, यदि संभव हो तो pastebin या किसी और जगह पर अपना स्टैक ट्रेस साझा कर सकते हैं?
जोड़ा लेखक jFrenetic, स्रोत
"ज़रूरत नहीं" के बजाय मैं कहूंगा "जरूरी नहीं"। कम से कम EclipseLink 2.6.2 का उपयोग कर सुनिश्चित करें। मैंने परीक्षण किया है
जोड़ा लेखक Miklos Krivan, स्रोत
मैं भी उम्मीद करता हूं लेकिन दुर्भाग्यवश ओआरएम के लिए एक्लिप्ससेंक 2.6.2 का उपयोग कर रहा हूं (मैंने दोनों फॉर्मूला की कोशिश की है) isTrue() रैपिंग उल्लिखित अपवाद उठाता है। यही कारण है कि मेरे शब्द सुझाव दिया गया। तो सैद्धांतिक रूप से "कोई ज़रूरत नहीं है" लेकिन व्यावहारिक रूप से "नहीं होना चाहिए"।
जोड़ा लेखक Miklos Krivan, स्रोत