(1) Team team = (Team)session.get(Team.class, 1);
Query query = session.createFilter(team.getStudents(),"where this.age>22");
List list = query.list();
注意以下几点:一,CreateFilter()方法返回的是Query对象;二,createFilter()方法的{dy}个参数为一个持久化对象,比如Team对象是临时或脱管状态都不行)的集合.
(2) 使用filter-def和filter来定义一个过滤器,如下:(类级别的过滤器)----查询Student时候过滤
<hibernate-mapping>
<!--把类和数表关联起来-->
<hibernate-mapping package="pojo">
<class name="Student" table="student" lazy="true">
<id name="id" type="integer" column="id">
<generator class="native"/>
</id>
<property name="name" column="name" type="string" not-null="true" length="255"/>
<many-to-one name="clazz" column="class_id" class="Classes"/>
<filter name="studentFilter" condition=":name=name"></filter>
</class>
<query name="queryStudent_byName">
<![CDATA[
from Student s where s.name like :name
]]>
</query>
<!-- filter-def是公用的别的映射文件中也可以使用 -->
<filter-def name="studentFilter">
<filter-param name="name" type="string"/>
</filter-def>
</hibernate-mapping>
session.enableFilter("studentFilter").setParameter("name", "stu 19");
String hql = "from Student";
Student student = (Student)session.createQuery(hql).uniqueResult();
Assert.assertEquals("stu 19", student.getName());
Assert.assertEquals(10, student.getClazz().getId().intValue());
(3)集合过滤器---对Classes中Student的过滤
<set name="students" table="student" cascade="all" inverse="true" lazy="true">
<key column="class_id"/>
<one-to-many class="pojo.Student"/>
<filter name="studentFilter" condition=":name=name"></filter>
</set>
session.enableFilter("studentFilter").setParameter("name", "stu 19");
String hql = "from Classes";
List<Classes> classesList = session.createQuery(hql).list();
for (Classes classes : classesList) {
Set<Student> students = classes.getStudents();
if (students.size() == 0) {
System.out.println(classes.getName());
} else {
for (Student student : students) {
Assert.assertEquals("stu 19", student.getName());
}
}
}
(4)编码形式
Classes classes = (Classes) session.get(Classes.class, 10);
Student student = (Student) session.createFilter(classes.getStudents(), "where this.name = 'stu 19'").uniqueResult();
Assert.assertEquals(10, student.getClazz().getId().intValue());