使用Hibernate过滤集合元素的两种方法

本文详细介绍了如何在Hibernate中使用过滤器实现懒加载时的数据筛选功能。一方面,可以通过编程方式直接在代码中应用过滤条件;另一方面,也可以通过配置HBM文件来定义过滤器并在运行时启用这些过滤器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 (1)通过代码
       
List list=session.createQuery("from Programer").list();
        
        
for(Iterator iter=list.iterator();iter.hasNext();)
        
{
           Programer p
=(Programer)iter.next();
           Collection pcs
=session.createFilter(p.getComputers(), "where this.id>'3'").list();
           
           
for(Iterator iter1=pcs.iterator();iter1.hasNext();){
               Computer c
=(Computer)iter1.next();
               System.out.println(c.getName());
           }
          
}

 

(2)通过HBM文件

    注意,必须设置lazy="true" 否则hibernate会预先加载computer数据,达不到过滤器再过滤的效果

      <set name="computers" cascade="save-update" lazy="true">
            
<key>
                
<column name="programer_id" length="50" />
            
</key>
            
<one-to-many class="com.Computer" />
            
<filter name="idFilter" condition="id>:idStr"></filter>
        
</set>
    
</class>
    
<filter-def name="idFilter">
       
<filter-param name="idStr" type="string"/>
    
</filter-def>

 

调用过滤器代码

 

List list=session.createQuery("from Programer").list();
        
        
for(Iterator iter=list.iterator();iter.hasNext();)
        
{
           Programer p
=(Programer)iter.next();
           Filter filter
=session.enableFilter("idFilter");
           filter.setParameter(
"idStr""3");
           
for(Iterator iter1=p.getComputers().iterator();iter1.hasNext();){
               Computer c
=(Computer)iter1.next();
               System.out.println(c.getName());
           }
          
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值