开发学院软件开发Java Hibernate过滤器使用窍门 阅读

Hibernate过滤器使用窍门

 2009-09-26 00:00:00 来源:WEB开发网   
核心提示: session.enableFilter("myFilter").setParameter("myFilterParam","some-value");注意,org.hibernate.Filter的方法允许链式方法调用,Hiberna

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

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

下面是一个比较完整的例子,使用了记录生效日期模式过滤有时效的数据:

<filter-def name="effectiveDate"> 
 
    <filter-param name="asOfDate" type="date"/> 
 
</filter-def> 
 
 
 
<class name="Employee" ...> 
 
...  
 
    <many-to-one name="department" column="dept_id" class="Department"/> 
 
    <property name="effectiveStartDate" type="date" column="eff_start_dt"/> 
 
    <property name="effectiveEndDate" type="date" column="eff_end_dt"/> 
 
...  
 
    <!--  
 
        Note that this assumes non-terminal records have an eff_end_dt set to  
 
        a max db date for simplicity-sake  
 
 
 
        注意,为了简单起见,此处假设雇用关系生效期尚未结束的记录的eff_end_dt字段的值等于数据库最大的日期  
 
    --> 
 
    <filter name="effectiveDate" 
 
            condition=":asOfDate BETWEEN eff_start_dt and eff_end_dt"/> 
 
</class> 
 
 
 
<class name="Department" ...> 
 
...  
 
    <set name="employees" lazy="true"> 
 
        <key column="dept_id"/> 
 
        <one-to-many class="Employee"/> 
 
        <filter name="effectiveDate" 
 
                condition=":asOfDate BETWEEN eff_start_dt and eff_end_dt"/> 
 
    </set> 
 
</class> 

定义好后,如果想要保证取回的都是目前处于生效期的记录,只需在获取雇员数据的操作之前先开启过滤器即可:

Session session = ...;  
 
session.enabledFilter("effectiveDate").setParameter("asOfDate", new Date());  
 
List results = session.createQuery("from Employee as e where e.salary > :targetSalary")  
 
         .setLong("targetSalary", new Long(1000000))  
 
         .list();  

在上面的HQL中,虽然我们仅仅显式的使用了一个薪水条件,但因为启用了过滤器,查询将仅返回那些目前雇用 关系处于生效期的,并且薪水高于一百万美刀的雇员的数据。

注意:

如果你打算在使用外连接(或者通过HQL或load fetching)的同时使用过滤器,要注意条件表达式的方向(左还是右)。 最安全的方式是使用左外连接(left outer joining)。并且通常来说,先写参数, 然后是操作符,最后写数据库字段名。

上一页  1 2 

Tags:Hibernate 过滤器 使用

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接