2012-01-04 110 views
51

我找一個休眠標準,瞭解以下內容:Hibernate的標準加入3個表

Dokument.class 被映射到角色 角色ID

Role.class 有ContactPerson 的ContactID

聯繫人類別 名字 姓氏

我想要搜索First或La聯繫人類中的stName並檢索連接的Dokuments列表。

我已經試過這樣的事情:

session.createCriteria(Dokument.class) 
.setFetchMode("role",FetchMode.JOIN) 
.setFetchMode("contact",FetchMode.JOIN) 
.add(Restrictions.eq("LastName","Test")).list(); 

我得到一個錯誤無法解析屬性「姓氏」類「庫門」

有人可以解釋爲什麼在庫門,而不是在加入搜索所有連接的表?在此先感謝您的幫助!

回答

103

獲取模式只表示必須獲取關聯。如果你想添加關聯實體的限制,你必須創建一個別名或者一個子標準。我一般喜歡使用化名,但情況因人而異:

Criteria c = session.createCriteria(Dokument.class, "dokument"); 
c.createAlias("dokument.role", "role"); // inner join by default 
c.createAlias("role.contact", "contact"); 
c.add(Restrictions.eq("contact.lastName", "Test")); 
return c.list(); 

這當然是很好的Hibernate reference manual解釋和javadoc for Criteria甚至有例子。閱讀文檔:它有很多有用的信息。

+3

JB非常感謝。是的,我已經閱讀了規格說明,但對於Hibernate新手來說,很難將所有Hibernate術語包裝在頭上。再次感謝它的工作:-) – mahatmanich 2012-01-04 12:34:02

+0

btw什麼是一個協會,只是一些參考? – mahatmanich 2012-01-04 12:34:59

+0

關聯是當實體通過OneToOne,OneToMany,ManyToOne或ManyToMany ...關聯鏈接到另一個實體時。 – 2012-01-04 13:05:56