HQL 检索方式
实例化查询结果
实例化查询结果可以说是对属性查询的一种改进.在使用属性查询时同于使用对象数组,操作和理解不太方便,如果将一个object[]中的所有成员封闭成一个对象就方便多了.
下面的程序将查询结果进行了实例化:
/*打开Sessio,开户事务*/
Query query = session.createQuery("select new Student(s.name,s.age) from Student s");\
List list = query.list();
for(int i=0;i<list.size();i++)
{
Student student = (Student)list.get(i);
System.out.println(student.getName + " " + student.getAge());
}
/*提交事务,关闭Session*/
需要注意的是,Student对象中必须有Student(name,age)的构造函数,否则会出错,
因为程序调用new Student(s.name,s.age)语句时打不到相应的构造函数.
集合过滤
下面是一个关于集合过滤的例子
/*打开Sessio,开户事务*/
term = (term)session.get(Term.class,"21fsd54fds41245742");
Query query = sesion.createFilter(term.getStudent(),"where this.age>18");
List list = query.list();
/*提交事务,关闭Session*/
在使用集合过滤时,需要注意以下几点:
createFilter()方法返回的是Query对象
createFilter()方法的第一个参数为一个持久化对象(必须为持久化状态,
临时或者脱管对象都是不行的)的集合.
/*打开Sessio,开户事务*/
term = (term)session.get(Term.class,"21fsd54fds41245742");
student = new Student();
student.setName("XXX");
student.setAge(20);
term.getStudent.add(student);
Query query = sesion.createFilter(term.getStudent(),"where this.age>18");
List list = query.list();
/*提交事务,关闭Session*/
此段程序查出的学生对象并不包含刚刚所添加的学生对象,即使他的年龄是符合条件的
posted on 2007-08-23 20:53
Ke 阅读(630)
评论(0) 编辑 收藏 所属分类:
hibernate