hibernate过滤器 filters
过滤器条件相当定一个非常类似于类和各种集合上的 where 属性的约束子句;
定一个过滤器在<hibernate-mapping/>节点之内的<filter-def>节点
<filter-def name="myFilter">
<filter-param name="myFilterParam" type="String"/>
<filter-def>
定义好了之后就可以在某个类中使用这个过滤器
<class name="myClass"....>
<filter name="myFilter" condition=":myFilterParam=MY_FILTERED_COLUMN" />
</class>
也可以在集合中使用它:
<set ....>
<filter name="myFilter" condition=":myFilterParam=MY_FILTERED_COLUMN" />
</set>
Session对象中会用到的方法有:enableFilter(String filtername),getEnabledeFilter(String filterName)
和disableFilter(String filterName),session中默认是不启动过滤器的,必须通过Session.enabledFilter()方法
显示的启动。该方法返回被启用的Filter的实例
session.enableFilater("myFilter").setParamter("myFilterParam","some-value");
<filter-def name="myFiltertest">
<filter-param name="asofDate" type="date"/>
<filter-def>
<class name="Employee" .....>
<many-to-one .....>
<filter name="effectiveDate" condition=":asofDate between eff_start_dt and eff_end_dt"/>
</class>
定义好了就可以使用
Session session=.....;
session.enabledFilter("myFiltertest").setParameter("asofDate",new Date());
List result=session.createQuery("from Object as o where o.####>o.param")
.setLong("param",new Long(1000000)).list();
过滤器对加载某个类或集合的时候把不符合条件的数据过滤掉..当然过滤器的使用是手动配置也可以不实用过滤器
例如:可以使用过滤器得到集合的大小,而不必实例化整个集合:
((Integer))session.createFilter(collection,"select count(*)").list().get(0)).intValue();
((Integer)).iterate("select count(*) from ...").next()).intValue();