2010-12-08 17 views
8

हमारे पास निम्नलिखित जेपीए वर्ग है:मैं जेपीए में संग्रह संपत्ति को गतिशील रूप से कैसे क्रमबद्ध कर सकता हूं?

@Entity 
class Supplier { 
    // ... id property etc. 

    @OneToMany 
    @OrderBy("someProperty") 
    private List<Region> regions; 
} 

यह सामान्य मामले में ठीक काम करता है। हालांकि, हमारे पास कुछ बहुभाषी डेटा हैं जहां मान nameEn, nameDe, nameZh जैसे गुणों में संग्रहीत हैं। उपयोग करने के लिए सटीक संपत्ति लॉग इन उपयोगकर्ता पर निर्भर करती है। उदाहरण के लिए, एक जर्मन भाषी उपयोगकर्ता को क्षेत्रों को देखना चाहिए जैसे कि यह @OrderBy("nameDe") के साथ एनोटेट किया गया था।

मैं इसे कैसे प्राप्त कर सकता हूं?

मुझे पता है कि लोड होने के बाद मैं अपने कोड में संग्रह को सॉर्ट कर सकता हूं, लेकिन इससे परिणामों की पेजिनेशन काफी मुश्किल हो जाती है।

+2

आप एनोटेशन में एम्बेड नहीं कर सकते हैं कि चूंकि एनोटेशन एक बार जब EntityManagerFactory अपने हठ इकाई के लिए बनाई गई है कार्रवाई की जाती है। आप जो करने की कोशिश कर रहे हैं वह गतिशील क्वेरी बनाने के समान है। –

उत्तर

4

आप उन्हें जावा में सॉर्ट कर सकते हैं। एक गेटर में संभवत:

List<Region> getRegions(){ 
    sorted = new List<Regions>(regions); 
    Collections.sort(sorted, new RegionComparator(getUserLanguage())); 
    return sorted; 
} 
+0

यदि आपके पास संग्रह में 1000 आइटम हैं और आप कुछ संपत्ति द्वारा क्रमबद्ध केवल पहले 10 प्राप्त करना चाहते हैं। डीबीएमएस में ऐसा करना अधिक कुशल होगा –

+0

@LaurynasTretjakovas तो आप सॉर्ट करने के बाद पहले 10 आइटमों पर बस फिर से शुरू करेंगे। सुनिश्चित नहीं है कि आपको क्या लगता है कि डेटाबेस अधिक कुशल होगा। –

+1

@ b1nary.atr0phy क्योंकि डेटाबेस तत्वों को सॉर्ट करने के लिए एक इंडेक्स का उपयोग कर सकता है और यदि आपके पास बहुत सारे रिकॉर्ड हैं तो आप तार पर आवश्यकतानुसार अधिक डेटा स्थानांतरित कर सकते हैं। –

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

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