2012-12-13 14 views
5

Nel mio progetto corrente ho riscontrato un problema con il recupero di entità con query sui criteri di sospensione. Ho le seguenti entità:I criteri di ibernazione richiedono più criteri

  • Professore, che contiene un elenco di studenti
  • studenti, che contiene un elenco delle assegnazioni.
  • Assegnazione, che contiene l'id dello studente a cui è assegnato.

Ora, voglio ottenere tutti i compiti relativi al professore, cioè tutti i compiti assegnati ai suoi studenti.

Questa query mostra cosa voglio implementare nella query di criteri.

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

Come posso implementare questa query utilizzando l'API di criteri di ibernazione?

risposta

12

supporre le tabelle così:

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

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

@Entity 
public class Assignments{ 
    K studentid; 
} 

semplice campione utilizzando 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

Grazie mille per la risposta! –

+0

e se volessi aggiungere un 'Restriction.eq' per' professor.id' equivale a 1234, cioè confrontando una proprietà direttamente con un 'Long'? –

+0

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

Problemi correlati