Red Hat Training

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

11.4.2. フィルタリングコレクション

コレクション フィルタ は、永続化されているコレクションや配列に適用される特殊なタイプのクエリです。そのクエリ文字列では、コレクションのその時点での要素を意味する this を参照可能です。
Collection blackKittens = session.createFilter(
    pk.getKittens(), 
    "where this.color = ?")
    .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )
    .list()
返されるコレクションは Bag とみなされます。そして、それはもとのコレクションのコピーになります。元のコレクションは修正されません。これは、「filter」という名前の意味とは反対ですが、期待される動きとは一致しています。
必要なら、持つことも可能ですが、フィルタには from 節が不要である点に注目してください。フィルタは、コレクションの要素自体を返して構いません。
Collection blackKittenMates = session.createFilter(
    pk.getKittens(), 
    "select this.mate where this.color = eg.Color.BLACK.intValue")
    .list();
クエリを含まないフィルタも役に立ちます。例えば、大きなコレクションの部分集合をロードするために使えます。
Collection tenKittens = session.createFilter(
    mother.getKittens(), "")
    .setFirstResult(0).setMaxResults(10)
    .list();