2012-11-20 24 views
5

मैं वसंत डेटा जेपीए के लिए नया हूं और समझने की कोशिश कर रहा हूं कि इसे QueryDSL के साथ सबसे अच्छा कैसे उपयोग किया जाए। QueryDSL के बिना, मैं बस @Query एनोटेशन के साथ अपने स्प्रिंगडाटा इंटरफ़ेस में कोई प्रश्न बनाने में सक्षम हूं।स्प्रिंग डेटा जेपीए और क्वेरीडीएसएल

QueryDSL का उपयोग करके एक ही अनुभव रखने के लिए, जो मैं देख सकता हूं, मुझे या तो अपना खुद का कस्टम रिपोजिटरी कार्यान्वयन बनाना होगा और मेरा रेपो इंटरफ़ेस मेरा कस्टम कार्यान्वयन इंटरफ़ेस बढ़ाएगा या मेरी सभी क्वेरीरीएल क्वेरी को एक सेवा परत पर रखेगा जो मेरे रेपो लपेटता है।

पहले मामले में, मैं अपने कस्टम रेपो में किसी भी एसडी स्वत: जेनरेटेड विधियों (उदा: findAll (QueryDSL predicate)) का उपयोग करने की क्षमता खो देता हूं क्योंकि मेरे पास वास्तविक रेपो ऑब्जेक्ट तक पहुंच नहीं है, और दूसरा मामला मैं रेपो परत की बजाय सेवा परत पर क्वेरी तर्क डाल रहा हूं।

न तो समाधान मेरे लिए विशेष रूप से आकर्षक लगता है। क्या कोई तीसरा तरीका है जो अधिक उपयुक्त है? या क्या मैं गलत समझ रहा हूं कि QueryDSL और स्प्रिंग डेटा का सही तरीके से उपयोग कैसे करें?

धन्यवाद!

एरिक

उत्तर

10

शायद सबसे सुविधाजनक तरीका है अपने भंडार इंटरफेस बस का विस्तार QueryDslPredicateExecutor जो क्षमता कहते हैं बस पाइप Querydsl भंडार में Predicate वस्तुओं और उन्हें स्टैंडअलोन या Pageable और Sort और पसंद के साथ निष्पादित करने के लिए जाने के लिए है।

यदि आप वास्तव में रिपोजिटरी परत (जो बिल्कुल ठीक है लेकिन वास्तव में एक अलग उद्देश्य प्रदान करता है) में भविष्यवाणी के संयोजन को छिपाना चाहते हैं तो आप here वर्णित एक अलग भंडार कार्यान्वयन वर्ग बनाते हैं और बेस क्लास के रूप में QueryDslRepositorySupport का उपयोग करते हैं। आपके कार्यान्वित खोजक तरीकों में आप क्वेरी क्लास के मेटा-मॉडल का उपयोग करके आसानी से निर्माण और निष्पादित करने के लिए बेस क्लास के , update(…) और delete(…) विधियों का उपयोग कर सकते हैं।

+0

मामला 'भंडार में भविष्यवाणी के संयोजन को छुपा नहीं रहा है', मेरे लिए यह 'समूह द्वारा' और ... को मेरे प्रश्नों में जोड़ने और उनको निष्पादित करने के बारे में है जो दुर्भाग्य से – azerafati

+0

के पास जाने लगते हैं , 'QueryDslPredicateExecutor'' groupBy' आदि का उपयोग करने की अनुमति नहीं देता है केवल क्वेरी का 'कहां' हिस्सा। यह अक्सर विचार नहीं किया जाता है। लेकिन बेस क्लास के रूप में 'QueryDslRepositorySupport' के साथ कस्टम रिपोजिटरी इत्यादि वास्तव में अच्छा है! – djxak

+0

@azerafati, https://github.com/infobip/infobip-spring-data-jpa-querydsl पर एक नज़र डालें, यह हो सकता है कि आप जो खोज रहे हैं। – lpandzic

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