我已经查看了 SO 和 Google,但我想我没有使用正确的搜索词或其他东西。
无论如何,假设我有三张桌子:
Companies
-----------------------------------------
id
name
user_id
Users
-----------------------------------------
id
username
usertype_id
UserTypes
-----------------------------------------
id
typeofuser
一家公司也是如此ACME
,它将有一个用户Moe
,而 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();
似乎带回了完全相同的结果集。我实际上已经阅读了用户手册。当我只嵌套一层时(即,用户搜索很好)但是当我得到两层时,我就不太明白了。手册没有帮助。我只是无法将猫和小猫与商业对象联系起来。也许他们应该使用猫、小猫和跳蚤?:-/
感谢您的任何建议。