Hibernate3.x过滤器的高级应用

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

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

  当然,我们也可以两者皆有。

  三、过滤器的用法

  为了支持新过滤器,Hibernate3.x中新添加了一个接口:org.hibernate.Filter,以及在org.hibernate.Session中加入了一些新方法。在Session中的新方法有:enableFilter(String filterName), getEnabledFilter(String filterName),以及disableFilter(String filterName)。在默认性况下,对于当前的会话,过滤器是关闭的。它们必须使用Session的enableFilter()方法来显式地打开过滤器。这个方法返回一个新过滤器的实例。按着上述的做法,我们可以用如下的代码打开过滤器:

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

  过滤大数据集

  对于Hibernate3.x以前的版本,处理大数据集必须要使用大量的代码。为了达到目的,必须先将整个数据集装到内存中,然后对这个数据集使用Session的filter()方法来过滤。而且当过滤实体时,我们必须手工写全部的HQL或一个定制的拦截器。

  而在Hibernate3.x中提供了一种更简捷,更一致的方法来过滤数据。Hibernate设计街头团队想用一个更有效的特性来处理每一件事,无论它们是国际化的还是本地数据,或是为了安全考虑以及其他的事。现在让我们看一个例子来解释这一切。

  四、实例

  1. 一个过滤数据的例子

  现在假设有一个实体,这个实体跟着“有效的记录”数据库模式。这个实体有多个行,每一行都根据日期不同而不同,也就是说在日期范围内是有效的。一个employment记录将是一个非常好的例子,因为employees可以来或去或再回来。现在我们开发一个带UI的程序,这个程序需要处理employment数据的当前记录。为了使用新的过滤器特性达到这个目的。我们首先需要定义这个过滤器,然后将它附着在Employee类上。

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

正在加载评论...