2012-12-13 13 views
5

मेरी वर्तमान परियोजना में मुझे हाइबरनेट मानदंड क्वेरी के साथ इकाइयों को प्राप्त करने की समस्या का सामना करना पड़ा है।हाइबरनेट मानदंड क्वेरी एकाधिक मानदंड

  • प्रोफेसर है, जो छात्रों
  • छात्र है, जो कार्य की एक सूची है की एक सूची है: मैं निम्नलिखित संस्थाओं की है।
  • असाइनमेंट, जिसमें छात्र की आईडी शामिल है जिसमें इसे असाइन किया गया है।

अब, मैं प्रोफेसर से संबंधित सभी असाइनमेंट प्राप्त करना चाहता हूं, यानी सभी असाइनमेंट प्रोफेसर अपने छात्रों को सौंपा गया।

यह क्वेरी दिखाती है कि मैं मानदंड क्वेरी में क्या कार्यान्वित करना चाहता हूं।

select * from Assigment p, Student a, Professor c where p.studentid = a.id and a.proffid = c.id and c.id = 2411; 

हाइबरनेट मानदंड API का उपयोग करके मैं इस क्वेरी को कैसे कार्यान्वित कर सकता हूं?

उत्तर

12

कि तरह अपने टेबल लगता है:

@Entity 
public class Professor{ 
    K id; 
    List<Student> students; 
} 

@Entity 
public class Student{ 
    K profid; 
    List<Assignments> assignments; 
} 

@Entity 
public class Assignments{ 
    K studentid; 
} 

उर्फ ​​का उपयोग करके सरल नमूना:

Criteria criteria = currentSession.createCriteria(Professor.class, "professor"); 
    criteria.createAlias("professor.students", "student"); 
    criteria.createAlias("student.assigments", "assigment"); 
    criteria.add(Restrictions.eqProperty("professor.id", "student.profid")); 
    criteria.add(Restrictions.eqProperty("assigment.studentid", "student.profid")); 
    criteria.add(Restrictions.eq("id", 2411)); 
return criteria.list(); 
+0

धन्यवाद आपके उत्तर के लिए एक बहुत! –

+0

क्या होगा यदि मैं 'प्रोफेसर.आईडी'' के लिए 'Restriction.eq' जोड़ना चाहता हूं, तो 1234 के बराबर है, यानी एक संपत्ति की तुलना सीधे 'लांग' से करें? –

+0

@ केविन मॉर्डिथ Restrictions.eq ("professor.id", 1234L) – anubina

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