2009-12-28 21 views
7

Ho una classe AppUser;Criteri di ibernazione/query sulle proprietà dell'oggetto

class AppUser { 
    private String firstName; 
    private String lastName; 
    //-- getters and setters 
} 

Ho anche un'altra classe Student;

class Student { 
    private AppUser appUser; 
    private Date dateOfBirth; 
    //-- getters and setters 
} 

come faccio a cercare Student John Doe, firstName John, lastName Doe?

Se fosse stata la data di nascita, vorrei creare uno Criteria e aggiungere una restrizione di uguaglianza (Restristions.eq) alla data. Come lo farei per lastName e firstName nell'oggetto AppUser?

risposta

7

Query:

Query q = session.createQuery(
    "SELECT s from Student s WHERE s.appUser.firstName=:firstName AND s.appUser.lastName=:lastName"); 
q.setParameter("firstName", "John"); 
q.setParameter("lastName", "Doe"); 

Per utilizzare Criteri, controllare this thread

anche dare un'occhiata a this page from hibernate docs

+0

grazie per la risposta, ma è possibile ottenere ciò senza una "query", piuttosto utilizzando "criteri" e "restrizione"? – n002213f

+0

ho provato 'appUser.firstName' ma ottengo un errore, proprietà sconosciuta – n002213f

+0

Ho aggiornato la mia risposta puntandola ai forum di ibernazione dove è stata posta una domanda simile. – Bozho

10

Potrebbe essere necessario aggiungere un alias ... qualcosa di simile:

List students = session.createCriteria(Student.class).createAlias("appUser", "user").add(Restrictions.eq("user.firstName", firstName)).list(); 

senza alias:

List students = session.createCriteria(Student.class).add(Restrictions.eq("appUser.firstName", firstName)).list(); 
+1

il secondo (almeno) non funzionerebbe. ;) – Bozho

+1

Il primo funziona per me e penso che risponda più direttamente alla domanda perché utilizza i criteri. – Jay

Problemi correlati