2009-12-28 16 views
7

Ich habe eine Klasse AppUser;Hibernate Kriterien/Abfrage von Objekteigenschaften

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

Ich habe auch eine andere Klasse Student;

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

Wie würde ich für Schüler suchen John Doe, vorName John, nachName Doe?

Wäre es das Geburtsdatum Eigentum gewesen, würde ich ein Criteria schaffen und eine Gleichheits-Beschränkung (Restristions.eq) am Datum hinzufügen. Wie würde ich es für LastName und FirstName im AppUser-Objekt tun?

Antwort

7

Abfrage:

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"); 

Kriterien für die Verwendung prüfen this thread

einen Blick auch auf this page from hibernate docs

+0

danke für die Antwort, aber ist es möglich, dies ohne eine "Abfrage" zu erreichen, eher mit "Kriterien" und "Einschränkung"? – n002213f

+0

Ich habe 'appUser.firstName' versucht, aber ich bekomme einen Fehler, unbekannte Eigenschaft – n002213f

+0

Ich aktualisierte meine Antwort, die es auf die Hibernate-Foren zeigte, wo eine ähnliche Frage gestellt wurde. – Bozho

10

Möglicherweise müssen Sie einen Alias ​​... so etwas wie hinzufügen:

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

Ohne ein Alias:

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

der zweite (zumindest) würde nicht funktionieren. ;) – Bozho

+1

Das erste funktioniert für mich, und ich denke, es beantwortet die Frage direkter, weil es Kriterien verwendet. – Jay

Verwandte Themen