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"); }