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

被折叠的 条评论
为什么被折叠?



