当我们使用hibernate并配置了关联关系时,如一对多,有时候我们查取一的一端的时候,并不需要把多的一端全部查询出来,而是需要一些符合条件的,这时就用到了hibernate过滤器。
比如,有员工Staff和考勤记录Att两张表,配置一对多,要查询今天的所有考勤记录。今天是个时间段,从00:00:00到23:59:59,我们需要配置hibernate的过滤器,xml配置如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.ys.store.entity">
<class name="Staff" table="ms_staff" catalog="mobile_stores">
<id name="staffNo" type="string">
<column name="staff_no" length="20" />
<generator class="assigned"></generator>
</id>
<property name="staffName" type="string">
<column name="staff_name" length="20" not-null="true" />
</property>
<set name="atts" lazy="true">
<key column="att_staff_no"></key>
<one-to-many class="Attendence"/>
<filter name="myFilter1" condition="att_time>start"/>
<filter name="myFilter2" condition="att_time<end"/>
</set>
</class>
<filter-def name="myFilter1">
<filter-param name="start" type="string"/>
</filter-def>
<filter-def name="myFilter2">
<filter-param name="end" type="string"/>
</filter-def>
</hibernate-mapping>
如上,
<filter-def name="myFilter1">
<filter-param name="start" type="string"/>
</filter-def>
<filter-def name="myFilter2">
<filter-param name="end" type="string"/>
</filter-def>
这段配置了两个过滤器,名称分别为myFilter1和myFilter2,接收的参数分别为start和end,代表今天的开始时刻和结束时刻
<set name="atts" lazy="true">
<key column="att_staff_no"></key>
<one-to-many class="Attendence"/>
<filter name="myFilter1" condition="att_time>:start"/>
<filter name="myFilter2" condition="att_time<:end"/>
</set>
是将过滤器添加到一对多的关联关系中,从而产生作用,name是引用上面的过滤器定义,condition指定过滤条件,:start和:end是过滤器传递来的参数,一会儿会在dao里给。
att_time是我要过滤的字段,是Attendence对应的表的字段。>和<要写成>和<。
dao里:
Session session=this.getSession();
session.enableFilter("myFilter1").setParameter("start",start);
session.enableFilter("myFilter2").setParameter("end",end);
return session.createQuery("from Staff").list();
如果你的程序只需要传入一个值进行过滤,那你只需要定义一个过滤器即可。具体可参照http://blog.csdn.net/daryl715/article/details/1920767