2009-12-28 74 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,名字約翰,姓氏Doe?

如果它是出生日期的屬性,我會創建一個Criteria並在日期中添加一個相等限制(Restristions.eq)。我怎麼會爲AppUser對象中的lastName和firstName?

回答

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

感謝您的回答,但是有可能在沒有'Query'的情況下實現這一點,而使用'Criteria'和'Restriction'? – n002213f 2009-12-28 12:54:40

+0

我已經嘗試過'appUser.firstName',但是我得到一個錯誤,未知的屬性 – n002213f 2009-12-28 13:02:47

+0

我更新了我的答案,指出它在類似問題被問到的hibernate論壇中。 – Bozho 2009-12-28 13:49:50

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 2009-12-28 16:17:43

+1

第一個適用於我,我認爲它更直接地回答了這個問題,因爲它使用了Criteria。 – Jay 2012-06-11 18:32:22