Hibernate3.x过滤器的高级应用

豆豆网   技术应用频道   2007年08月09日  【字号: 收藏本文

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

  在很多应用程序中不需要一次使用数据表中的所有的数据。在这种情况下,我们就需要使用Hibernate的过滤器(Filter)来得到一个数据字集。过滤器的主要作用是限制我们的应用程序的查询数据。这个过滤器的概念并不是什么新概念,如数据库的视图也属于过滤器范畴。而Hibernate为我们提供的过滤器是在一个抽象的层次,它可以做到和不依赖于数据库的类型,使数据访问层只面对一个解决方案,那就是Hibernate Filter。当然,直接在数据库中建立视图也算一种解决方案,但这样做太不灵活。而Hibernate过滤器却能够在Hibernate会话的过程中打开或关闭。另外,另外,Hibernate过滤器可以传递参数,这样将大大增加Hibernate的灵活性。虽然Hibernate2也提供了过滤器,但Hibernate3.x提供了一种全新的过滤器。

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

  一、什么时候使用过滤器

  为了解释为什么使用过滤器,下面让我们先来看一个例子。假设有一个管理用户信息的Web应用程序。在当前状态,我们的应用程序使用同一个应用接口来处理所有的用户信息。但如果最终用户要求将活动用户和过期用户分开管理。这些状态信息被保存在用户表的某一列中。对于这种需求,我们最容易想到的一个解决方案是重新写每一个SELECT HQL查询语句,也就是在每一个HQL后加一个WHERE条件来过滤这些数据。当然,这种方法的复杂程序取决于你的Web程序是如何建立的,可以很简单,也可以很复杂。但不管是简单还是复杂,都必须得修改我们曾经测试过的代码,这将给我们的程序带来非常大的隐患。而使用Hibernate3.x,将会给我们带来另外一个解决方案。我们将会为应用程序的用户状态创建一个过滤器。当用户选择用户的状态时(活动或过期),应用程序将激活当前Hibernate会话的用户状态过滤器。这样以来,所有的SELECT HQL查询将返回查询结果的子集,而我们只需要在Hibernate会话状态和用户状态过滤器两个地方添加代码,并不需要修改原先的代码。

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

正在加载评论...