繁体   English   中英

如何使用Hibernate Criteria来查询嵌套表?

[英]How can I use Hibernate Criteria's to query nested tables?

我看过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中做到这一点。 我试过了:

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();

似乎带回完全相同的结果集。 我实际上已经阅读了用户手册。 当我只嵌套一层深度(即用户搜索很好)但是当我得到两层深度时,我无法得到它。 手册没有帮助。 我只是无法将猫和小猫与业务对象联系起来。 也许他们应该使用猫,小猫和跳蚤? : - /

谢谢你的任何建议。

虽然您的查询应该有效,但下面是另一种变体:

 Criteria crit = io.getSession().createCriteria(Company.class);
 List<Company> list = 
       crit.createAlias("users", "u")
       .createAlias("u.usertypes", "ut", Criteria.INNER_JOIN, 
                         Restrictions.eq("ut.typeofuser", "Stooge")
       .list();

没关系。 我一直在做这件事。 我在其他地方遇到了错误。

随意删除这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM