2012-06-09 24 views
15

मानदंड API में setResultTransformer विधि का उपयोग क्या है? क्या कोई इसे सरल उदाहरण के साथ समझा सकता है? मैंने javadocs पढ़ा लेकिन मैं उन्हें स्पष्ट रूप से समझने में सक्षम नहीं हूँ।मानदंड में setResultTransformer

सादर,

उत्तर

13

एक मानदंड क्वेरी जो setProjections (प्रयोग नहीं करता है के लिए डिफ़ॉल्ट ResultTransformer) ROOT_ENTITY हो जाएगा।

अगर हम विभाग को एक ManyToMany संबंध में छात्र है एक प्रश्न इस प्रकार दिखाई देंगे ...

Session session = (Session) getEntityManager().getDelegate(); 
    Criteria crit = session.createCriteria(Student.class) 
     .createAlias('departments', 'department'); 

इस क्वेरी डुप्लिकेट वापस आ जाएगी। लेकिन जैसे-जैसे ResultTransformer ...

crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 

अब परिणाम अलग जब हाइबरनेट परिणाम Marshalls हो जाएगा निर्धारित किया है। (या मैं unmarshalls मतलब है?)

आप चाहते हैं एक List<Student> के रूप में क्वेरी वापस जाने के लिए हाइबरनेट नहीं है, लेकिन एक List<Object[]> तो

crit.setResultTransformer(CriteriaSpecification.PROJECTION) 
+1

दस्तावेज़ से, मैं इस शब्द को ROOT_ALIAS के लिए देख सकता हूं: उपनाम जो मानदंड क्वेरी की "रूट" इकाई को संदर्भित करता है। इस मामले में "रूट" शब्द क्या है? मैं समझ नहीं पा रहा हूं कि रूट इस मामले में क्या संदर्भित करता है। कृपया समझाएँ। – user182944

+2

"रूट" आपके मानदंड उदाहरण बनाते समय उपयोग की जाने वाली किसी भी कक्षा के लिए है। मेरे उदाहरण में रूट छात्र है। तो परिणाम छात्रों की सूची के रूप में crit.list() को एक कॉल द्वारा वापस कर दिया जाएगा। जब तक आप परिणाम के रूप में परिणाम संसाधन के लिए नहीं पूछते, तब तक यह ऑब्जेक्ट ऑब्जेक्ट्स की एक सूची होगी। (साथ ही, मैं प्रतिबंध को हटाने के लिए अपना मूल उदाहरण संपादित कर रहा हूं ताकि क्वेरी डुप्लिकेट लौटा दे।) – carbontax

7

, बस के रूप में परिणाम को संभालने के लिए पसंद करते हैं: जब आप कर रहे हैं शर्तों को पूरा करते : उदाहरण के लिए:: आप resultset विशेष वस्तु में होना चाहता हूँ कि आप इसे पसंद का उपयोग कर सकते

.setResultTransformer(Transformers.aliasToBean(Employee.class)); 

EmployeeResultSet इकाई मेल खाना चाहिए।

+0

यह पूरी तरह से काम करता है! – normalUser

+0

एक आकर्षण की तरह काम करता है। अच्छा सुझाव। धन्यवाद – niarb