2010-05-10 10 views
5

मैं दो लगातार कक्षाओं के लिए संयुक्त क्वेरी करना चाहता हूं।एचक्यूएल चयन खंड के बराबर हाइबरनेट मानदंड API?

HQL में इस चयन खंड द्वारा प्राप्त किया जा सकता है,

select new Family(mother, mate, offspr) 
    from DomesticCat as mother 
     join mother.mate as mate 
     left join mother.kittens as offspr 

उपरोक्त उदाहरण में, परिवार पैरामीटर

अपने कंसट्रक्टर रूप DemesticCat के साथ एक conbined वर्ग क्या HQL का मानदंड बराबर है है खंड का चयन करें?

उत्तर

5

इसके लिए आपको ResultTransformer का उपयोग करना होगा। Hibernate 3.2: Transformers for HQL and SQL ब्लॉग पोस्ट निम्नलिखित उदाहरण देता है (जहां StudentDTO एक गैर इकाई बीन है):

List resultWithAliasedBean = s.createCriteria(Enrolment.class) 
    .createAlias("student", "st").createAlias("course", "co") 
    .setProjection(Projections.projectionList() 
        .add(Projections.property("st.name"), "studentName") 
        .add(Projections.property("co.description"), "courseDescription") 
     ) 
      .setResultTransformer(Transformers.aliasToBean(StudentDTO.class)) 
      .list(); 

StudentDTO dto = (StudentDTO)resultWithAliasedBean.get(0); 
+0

बहुत बहुत धन्यवाद! यही वही है जो मैं ढूंढ रहा था! लगता है मानदंड एचक्यूएल के रूप में लगभग शक्तिशाली है। धन्यवाद! –

1

मानदंड API में, इस कार्यक्षमता को Projections द्वारा नियंत्रित किया जाता है। दस्तावेज थोड़ा उलझन में और अधिक जटिल है, लेकिन यही आपको देखने की जरूरत है।

+0

skaffman: अपने त्वरित जवाब के लिए धन्यवाद। मैं सिर्फ अनुमान भाग के बारे में बताया, और पाया कि PropProjection.Property.forName ("नाम") परिणाम के रूप में स्तंभों की एक सबसेट फिल्टर करने के लिए इस्तेमाल किया जा सकता, लेकिन मैं एक प्रोजेक्शन दो हठ नक्शे कि नहीं पा सके उपरोक्त उदाहरण में पारिवारिक वर्ग की तरह, एक नई कक्षा में कक्षाएं? क्या आप उस पर कुछ प्रकाश डाल सकते हैं? –

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