3

私はSOとGoogle全体を見てきましたが、正しい検索用語などを使用していないと思います。

とにかく、私が3つのテーブルを持っているとしましょう:

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

まったく同じ結果セットを取り戻すようです。私は実際にユーザーマニュアルを読みました。また、ネストの深さが1レベルしかない場合(つまり、ユーザーによる検索は問題ありません)、2層の深さになると、完全に取得できません。そして、マニュアルは役に立ちません。猫や子猫をビジネスオブジェクトに関連付けることはできません。多分彼らは猫、子猫、ノミを使うべきですか?:-/

提案をありがとう。

4

2 に答える 2

6

クエリは機能するはずですが、以下は別のバリエーションです。

 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();
于 2012-11-09T22:49:42.727 に答える
0

どうでも。私はずっとそれをしていました。別の場所でエラーが発生しました。

この質問は自由に削除してください。

于 2012-11-09T22:50:30.563 に答える