Red Hat Training

A Red Hat training course is available for Red Hat JBoss Web Server

16.4. 関連

createCriteria()を利用し関連を遷移することで、関連エンティティの制約を指定できます:
List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "F%") )
    .createCriteria("kittens")
        .add( Restrictions.like("name", "F%") )
    .list();
2番目の createCriteria() は、kittens コレクションの要素を参照する新しい Criteria インスタンスを返します。
特定の状況において有用な方法もほかにあります:
List cats = sess.createCriteria(Cat.class)
    .createAlias("kittens", "kt")
    .createAlias("mate", "mt")
    .add( Restrictions.eqProperty("kt.name", "mt.name") )
    .list();
createAlias() は新しい Criteria インスタンスを作成しません。)
前の2つのクエリが返す Cat インスタンスにより保持される kittens コレクションは、criteria によって事前にフィルタリング されません。criteria と一致する kitten を取得したい場合、 ResultTransformer を使わなければなりません。
List cats = sess.createCriteria(Cat.class)
    .createCriteria("kittens", "kt")
        .add( Restrictions.eq("name", "F%") )
    .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)
    .list();
Iterator iter = cats.iterator();
while ( iter.hasNext() ) {
    Map map = (Map) iter.next();
    Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
    Cat kitten = (Cat) map.get("kt");
}