私は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層の深さになると、完全に取得できません。そして、マニュアルは役に立ちません。猫や子猫をビジネスオブジェクトに関連付けることはできません。多分彼らは猫、子猫、ノミを使うべきですか?:-/
提案をありがとう。