【发布时间】:2012-11-09 22:31:23
【问题描述】:
我查看了所有的 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();
似乎带回了完全相同的结果集。我实际上已经阅读了用户手册。当我只嵌套一层时(即,用户搜索很好)但是当我得到两层时,我就不太明白了。手册没有帮助。我只是无法将猫和小猫与商业对象联系起来。也许他们应该使用猫、小猫和跳蚤? :-/
感谢您的任何建议。
【问题讨论】:
标签: java hibernate associations criteria