2012-12-13 236 views
5

在我當前的項目中,我遇到了一個使用hibernate條件查詢獲取實體的問題。我有以下實體:休眠條件查詢多個條件

  • 教授,其中包含學生
  • 學生,其中包含分配的列表清單。
  • 作業,其中包含它分配給的學生的ID。

現在,我想要得到所有相對於教授的任務,即所有的任務教授分配給他的學生。

此查詢顯示我想在條件查詢中實現的內容。

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

如何使用hibernate標準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

如果我想爲'professor.id'添加'Restriction.eq'等於1234,即將屬性直接與'Long'比較,該怎麼辦? –

+0

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