定义过滤器:
<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();