2012-12-13 23 views
5

In meinem aktuellen Projekt hatte ich ein Problem mit Entitäten mit Hibernate-Kriterien Abfrage. Ich habe folgende Einheiten:Hibernate-Kriterien Abfrage mehrerer Kriterien

  • Professor, der eine Liste von Studenten enthält
  • Studenten, die eine Liste der Zuordnungen enthält.
  • Zuordnung, die die ID des Studenten enthält, dem sie zugewiesen ist.

Jetzt möchte ich in Bezug auf den Professor alle Zuordnungen erhalten, das heißt alle Professor Zuweisungen an seine Schüler zugewiesen.

Diese Abfrage zeigt, was ich in der Kriterienabfrage implementieren möchte. mit Hibernate Kriterien API

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

Wie kann ich diese Abfrage implementieren?

Antwort

12

nehme Ihre Tabellen wie folgt aus:

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

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

@Entity 
public class Assignments{ 
    K studentid; 
} 

einfache Probe durch Alias:

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

Vielen Dank für Ihre Antwort! –

+0

Was wäre, wenn ich eine 'Restriction.eq' für' professor.id' hinzufügen möchte, die gleich 1234 ist, d. H. Eine Eigenschaft direkt mit einer 'Long' vergleichen? –

+0

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

Verwandte Themen