10.4.2. 过滤集合

集合过滤器(filter)是一种用于一个持久化集合或者数组的特殊的查询。查询字符串中可以使用"this"来引用集合中的当前元素。

  1. Collection blackKittens = session.createFilter(
  2. pk.getKittens(),
  3. "where this.color = ?")
  4. .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )
  5. .list()
  6. );

返回的集合可以被认为是一个包(bag, 无顺序可重复的集合(collection)),它是所给集合的副本。 原来的集合不会被改动(这与“过滤器(filter)”的隐含的含义不符,不过与我们期待的行为一致)。

请注意过滤器(filter)并不需要from子句(当然需要的话它们也可以加上)。过滤器(filter)不限定于只能返回集合元素本身。

  1. Collection blackKittenMates = session.createFilter(
  2. pk.getKittens(),
  3. "select this.mate where this.color = eg.Color.BLACK.intValue")
  4. .list();

即使无条件的过滤器(filter)也是有意义的。例如,用于加载一个大集合的子集:

  1. Collection tenKittens = session.createFilter(
  2. mother.getKittens(), "")
  3. .setFirstResult(0).setMaxResults(10)
  4. .list();