2012-12-13 6 views
5

W moim bieżącym projekcie napotkałem problem z uzyskaniem jednostek z zapytaniem o kryteria hibernacji. Mam następujące podmioty:Kryterium hibernacji zapytanie o wiele kryteriów

  • profesorze, który zawiera listę studentów
  • Student, który zawiera listę zadań.
  • Przypisanie, które zawiera identyfikator ucznia, do którego jest przypisany.

Teraz chcę uzyskać wszystkie zadania związane z profesorem, tj. Wszystkie zadania przypisane profesorowi do jego uczniów.

To zapytanie pokazuje, co chcę zaimplementować w zapytaniu o kryteria.

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

Jak mogę zaimplementować tę kwerendę przy użyciu API hibernacji?

Odpowiedz

12

przypuszczać tabele tak:

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

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

@Entity 
public class Assignments{ 
    K studentid; 
} 

prosty przykład za pomocą aliasu:

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

dziękuję za odpowiedź! –

+0

co jeśli chciałbym dodać 'Restriction.eq' dla' professor.id' jest równe 1234, tj. Porównanie właściwości bezpośrednio do 'Long'? –

+0

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