2009-12-28 2 views
7

У меня есть класс AppUser;Критерий для спящего режима/Запрос на свойства объекта

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

У меня есть еще один класс Student;

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

Как бы я искать Студент John Doe, ПгвЬЫате Джон, LastName Doe?

Если бы это была дата рождения, я бы создал Criteria и добавил равенство Ограничение (Restristions.eq) на дату. Как сделать это для lastName и firstName в объекте AppUser?

ответ

7

Запрос:

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

Для использования критериев, проверьте this thread

Также посмотрите на this page from hibernate docs

+0

спасибо за ответ, но можно ли достичь этого без «запроса», вместо использования «Критерии» и «Ограничение»? – n002213f

+0

Я попробовал 'appUser.firstName', но я получаю сообщение об ошибке, неизвестное свойство – n002213f

+0

Я обновил свой ответ, указав его на форумы hibernate, где был задан аналогичный вопрос. – Bozho

10

Вам может понадобиться добавить псевдоним ... что-то вроде:

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

Без псевдонима:

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

второй (по крайней мере) не сработает. ;) – Bozho

+1

Первый работает для меня, и я думаю, что он более непосредственно отвечает на вопрос, потому что он использует критерии. – Jay

Смежные вопросы