我已經看過所有這些和谷歌,但我想我沒有使用正確的搜索字詞或什麼。如何使用Hibernate Criteria查詢嵌套表?
反正說我有三個表:
Companies
-----------------------------------------
id
name
user_id
Users
-----------------------------------------
id
username
usertype_id
UserTypes
-----------------------------------------
id
typeofuser
所以ACME
將是一個公司,那就有一個用戶Moe
和教育部將是一個Stooge
用戶類型。
在SQL中,我會做這樣的事情:
select
*
from companies c
join users u on (u.id = c.user_id)
join usertypes ut on (ut.id = u.usertype_id)
where
ut.typeofuser = 'Stooge'
但我似乎無法弄清楚如何做到這一點的標準。我曾嘗試過:
Criteria crit = io.getSession().createCriteria(Company.class);
List<Company> list =
crit.createCriteria("users")
.createCriteria("usertypes")
.add(Restriction.eq("typeofuser", "Stooge").list();
但我回來的路太多記錄。結果甚至沒有接近準確。
我也試過:
Criteria crit = io.getSession().createCriteria(Company.class);
List<Company> list =
crit.createAlias("users", "u")
.createAlias("u.usertypes", "ut")
.add(Restriction.eq("ut.typeofuser", "Stooge").list();
似乎帶回完全相同的結果集。我其實已經閱讀了用戶手冊。而當我只嵌入一層時(即用戶搜索很好),但是當我得到兩層深的時候,我無法完全理解它。手冊沒有幫助。我只是不能將貓和小貓與商業對象聯繫起來。也許他們應該使用貓,小貓和跳蚤? : -/
感謝您的任何建議。
thanX很多,你的回答爲我節省了很多時間! – Mehdi
哪種效率更高? INNER_JOIN或添加? – jichi
我不認爲這有一個直接的答案。如果表的數據有限且內部聯接預先過濾了不需要的數據,它將會很有效;否則我們需要處理/微調過濾器條件,以便在內存中獲得最佳數據需求/操作。我們還可以使用索引,分區和其他查詢優化技術來優化數據庫配置。 –