簡體   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