我已经看过所有这些和谷歌,但我想我没有使用正确的搜索字词或什么。如何使用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
我不认为这有一个直接的答案。如果表的数据有限且内部联接预先过滤了不需要的数据,它将会很有效;否则我们需要处理/微调过滤器条件,以便在内存中获得最佳数据需求/操作。我们还可以使用索引,分区和其他查询优化技术来优化数据库配置。 –