2012-12-13 48 views
5

Trong dự án hiện tại của tôi, tôi đã gặp phải sự cố khi nhận các thực thể có truy vấn tiêu chí ngủ đông. Tôi có các đối tượng sau:Truy vấn tiêu chí Hibernate nhiều tiêu chí

  • Giáo sư, trong đó có chứa một danh sách các sinh viên
  • Sinh viên, trong đó có chứa một danh sách các bài tập.
  • Bài tập có chứa id của sinh viên được chỉ định.

Bây giờ, tôi muốn nhận tất cả các bài tập liên quan đến giáo sư, tức là tất cả các bài tập được giao cho giáo viên của học sinh.

Truy vấn này hiển thị những gì tôi muốn triển khai trong truy vấn tiêu chí.

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

Làm cách nào để triển khai truy vấn này bằng API tiêu chuẩn ngủ đông?

Trả lời

12

giả sử bảng của bạn như thế:

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

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

@Entity 
public class Assignments{ 
    K studentid; 
} 

đơn giản mẫu bằng cách sử dụng bí danh:

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

Cảm ơn rất nhiều cho câu trả lời của bạn! –

+0

Nếu tôi muốn thêm 'Restriction.eq' cho' professor.id' bằng 1234, tức là so sánh trực tiếp một thuộc tính với 'Long'? –

+0

@KevinMeredith Restrictions.eq ("professor.id", 1234L) – anubina

Các vấn đề liên quan