2009-12-28 7 views
7

Tengo una clase AppUser;Criterios de Hibernación/Consulta sobre las propiedades del objeto

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

También tengo otra clase Student;

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

¿Cómo iba a buscar i para el Estudiante John Doe, primerNombre Juan, lastName Doe?

Si hubiera sido la fecha de nacimiento, crearía un Criteria y agregaría una Restricción de igualdad (Restristions.eq) en la fecha. ¿Cómo lo haría para lastName y firstName en el objeto AppUser?

Respuesta

7

Consulta:

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

Para el uso de criterios, compruebe this thread

También echa un vistazo a this page from hibernate docs

+0

gracias por la respuesta, pero ¿es posible lograr esto sin un 'Query', en lugar de usar' Criteria' y 'Restriction'? – n002213f

+0

He intentado 'appUser.firstName' pero me sale un error, propiedad desconocida – n002213f

+0

Actualicé mi respuesta apuntándola a los foros de hibernación donde se hizo una pregunta similar. – Bozho

10

Es posible que tenga que agregar un alias ... algo así como:

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

Sin un alias:

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

el segundo (al menos) no funcionaría. ;) – Bozho

+1

El primero funciona para mí, y creo que responde más directamente a la pregunta porque usa Criteria. – Jay

Cuestiones relacionadas