2009-05-27 14 views
9

में अद्वितीय परिणाम प्राप्त करना हम हाइबरनेट में मानदंडों का उपयोग करके अलग-अलग परिणाम कैसे प्राप्त कर सकते हैं।हाइबरनेट

उत्तर

13
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

भी https://forum.hibernate.org/viewtopic.php?t=941669

+0

एक नहीं बल्कि एक डेटाबेस क्वेरी का उपयोग करके अलग परिणाम प्राप्त करने पर विचार करना चाहिए (उदाहरण के लिए Criteria.DISTINCT_ROOT_ENTITY का उपयोग करने के बजाय X से DISTINCT (xyz) चुनें। कृपया ध्यान दें कि मानदंड .DISTINCT_ROOT_ENTITY स्मृति में ऑब्जेक्ट्स से अद्वितीय परिणाम प्राप्त करता है (और डेटाबेस से नहीं), जो बड़े परिणाम सेट के लिए महंगा हो सकता है। – Philipp

6

देखें एक और अधिक लचीला समाधान हो सकता है:

criteria.setProjection(Projections.distinct(Projections.property("property"))); 
+0

बेशक आप का मतलब है "Projections.distinct" – speshak

+0

मैंने देखा, अच्छी तरह से देखा। – waxwing

+2

आप Projection.distinct का उपयोग करने से बचना चाह सकते हैं क्योंकि इसके परिणामस्वरूप केवल एक ही संपत्ति को कम करने के लिए गंदे अनपेक्षित पक्ष को प्रभावित किया गया है। – user959690

1

आपकी क्वेरी/मापदंड पर निर्भर करता है। अगर आप में एक विशिष्ट आईडी आप criteria.uniqueResult (कॉल कर सकते हैं) अन्यथा आप फोन प्रदान criteria.setMaxResults (1) और criteria.uniqueResult फोन()