2012-12-20 13 views
5

निम्नलिखित पर विचार करें:कैसे JPA2 में एक संग्रह आकार की जाँच करने के

@Entity 
public class Book 
{ 
    private List<String> authors; 
    @ElementCollection 
    public List<String> getAuthors() { 
     return authors; 
    } 

    public void setAuthors(List<String> authors) { 
     this.authors = authors; 
    } 
} 

कैसे एक JPA2 CriteriaQuery अभिव्यक्ति है, जो कहते हैं, मुझे सभी पुस्तकें जो अधिक से अधिक 2 लेखक हैं खोजने के दूँगी टाइप करने के लिए?

उत्तर

10

JPQL में:

select b from Book where size(b.authors) >= 2 

मापदंड एपीआई का उपयोग करना (लेकिन क्यों आप निम्नलिखित गंदगी के साथ इस तरह के एक सरल स्थिर क्वेरी की जगह लेंगे?):

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Book> criteriaQuery = cb.createQuery(Book.class); 
Root<Book> book = criteria.from(Book.class); 
Predicate predicate = cb.ge(cb.size(book.get(Book_.authors)), 2); 
criteriaQuery.where(predicate); 
criteriaQuery.select(
+0

धन्यवाद, यह उपयोगी है, मैं जेपीए 2 अभिव्यक्तियों के लिए एक यूआरआई क्वेरी भाषा मैपिंग पर काम कर रहा हूं - CriteriaQuery एपीआई, जबकि कुछ मामलों में वर्बोज़ और तर्कसंगत रूप से लचीला होने के उद्देश्य से उद्देश्य के लिए काफी अच्छा फिट बैठता है; जेपीक्यूएल भी शुरू में समर्थित है - इसलिए एक और संकेत के लिए अतिरिक्त धन्यवाद; बीटीडब्ल्यू - चयन() वास्तव में आवश्यक है या "em.createQuery (मानदंड) .getResultList()" इसके बजाय पालन करें? –

+1

मुझे लगता है कि मैं चयन किए बिना क्वेरी निष्पादित करने में सक्षम हूं। लेकिन यह हाइबरनेट के साथ था, जिसे एचक्यूएल प्रश्नों में चयन करने की ज़रूरत नहीं थी, जबकि जेपीक्यूएल को उनकी आवश्यकता होती है। मैं निश्चित रूप से सुनिश्चित करने के लिए एक चयन खंड जोड़ूंगा। –

+0

<1 के लिए वृद्धि>> लेकिन आप निम्न गड़बड़ी के साथ ऐसी सरल स्थैतिक क्वेरी को क्यों बदल देंगे? " – aroth

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

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