Hibernate过滤器

来源:互联网 发布:童虎和撒加 知乎 编辑:程序博客网 时间:2024/04/30 01:35
定义过滤器:
<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), getEnabledFilter(String filterName), 和 disableFilter(String filterName). Session中默认是启用过滤器的,必须通过Session.enabledFilter()方法显式的启用。 该方法返回被启用的Filter的实例。以上文定义的过滤器为例:

session.enableFilter("myFilter").setParameter("myFilterParam", "some-value");

注意,org.hibernate.Filter的方法允许链式方法调用。(类似上面例子中启用Filter之后设定Filter参数这个“方法链”) Hibernate的其他部分也大多有这个特性。

 

简单例子

Room.hbm.xml

<class name="Room" table="t_room" >
        <id name="id">
             <generator class="native"/>        
        </id>
        <property name="name" column="name"></property>   
        <filter name="myFilter" condition=" name between :room1 and :room2"/>
    </class>
    <filter-def name="myFilter">
             <filter-param name="room1" type="string"/>
             <filter-param name="room2" type="string"/>
     </filter-def>

 

test.java

         session.beginTransaction();   

        //只查询room1 到 room3的名字
         session.enableFilter("myFilter").setParameter("room1", "room1")
                                              .setParameter("room2", "room3");           
          List list=session.createQuery("select name from Room").list();