hibernate过滤器的使用方法

当我们使用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&gt;start"/>
            <filter name="myFilter2" condition="att_time&lt;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&gt;:start"/>
            <filter name="myFilter2" condition="att_time&lt;:end"/>
</set>  
是将过滤器添加到一对多的关联关系中,从而产生作用,name是引用上面的过滤器定义,condition指定过滤条件,:start和:end是过滤器传递来的参数,一会儿会在dao里给。

att_time是我要过滤的字段,是Attendence对应的表的字段。>和<要写成&gt;和&lt;。

dao里:

Session session=this.getSession();
session.enableFilter("myFilter1").setParameter("start",start);
session.enableFilter("myFilter2").setParameter("end",end);
		
return session.createQuery("from Staff").list();


到这里就完成了,在你查询Staff的时候,hibernate会关联查询Att,并且加上过滤器转而来的where语句。

如果你的程序只需要传入一个值进行过滤,那你只需要定义一个过滤器即可。具体可参照http://blog.csdn.net/daryl715/article/details/1920767



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值