(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());
}
}












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












调用过滤器代码











