Hibernate3.x过滤器的高级应用

http://tech.ddvip.com   2007年08月09日    社区交流

内容摘要:Hibernate3的过滤器可以进行预定义,并可绑定在类和集合层。那么什么叫预定义过滤器呢?就是可以定义象"where"子句的限制性子句,但这些子句是相对类和不同集合的元素的。除了这些过滤器条件可以被参数化外。系统还能决定在运行是指定的过滤器是否应该被打开以及什么值被传入过滤器参数。

  从概念上讲,你可以使用WHERE子句在应用程序中完成和Hibernate过滤器同样的工作。当然,我们还可以在数据库中建立视图来完成同样的工作(但所使用的数据库必须支持视图功能)。这三种解决方案都可以通过一个或多个查询条件来限制最终结果。而Hibernate过滤器的优势就在于可以随时在程序中关闭或打开,也就是说过滤器是可编程的,而且过滤器被定义在Hibernate的映射文件中,这样将非常容易维护。当然,过滤器也有不足的地方,主要的不足就是在运行时无法创建新的过滤器。而程序在运行时,所有的过滤器必须要在映射文件中被指定。虽然这将大大限制过滤器的灵活性,但过滤器支持参数化。对于本文的例子,我们可以在映射文件中指定保存用户状态信息的列。我们不需要在映射文件中指定可能的状态值,这些在程序运行时都可以指定。接下来我们就来看看如何使用Hibernate3.x中的过滤器来写程序。

  二、过滤器的配置

  为了使用过滤器,它们需要首先被定义,然后和响应的元素绑定。为了定义一个过滤器,我们将使用<hibernate-mapping/>中的<filter-def/>元素来定义Hibernate过滤器。如下所示:

<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>

来源:IT168    作者:极地圣火    责编:豆豆技术应用

正在加载评论...