转自javaeye的
hintcnuie:
集合过滤器filter是query的特殊类型,可以应用于已持久化的集合或数组中。查询语句中可以使用关键字this来指代当前集合中的元素。
代码
- Collection blackKittens = session.createFilter(
- pk.getKittens(),
- "where this.color = ?")
- .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )
- .list()
返回的集合是Hibernate自定义的bag类型,而且该集合是查询的集合的拷贝,不会修改原来的集合。
注意filter中不需要from子句(如果需要也可以添加),也不限制指返回集合元素:
代码
- Collection blackKittenMates = session.createFilter(
- pk.getKittens(),
- "select this.mate where this.color = eg.Color.BLACK.intValue")
- .list();
即时是一个空的filter查询也是有用的,特别是在一个庞大的集合中查询一些子集合的时候:
代码
- Collection tenKittens = session.createFilter(
- mother.getKittens(), "")
- .setFirstResult(0).setMaxResults(10)
- .list();
在集合中常用的有:
在只需要集合大小,不想初始化集合时,可以使用如下代码:
代码
- Integer size = (Integer)session.createFilter(mother.getKittens(),"select count(*)").uniqueResult.