hibernate HQL 查询使用详解
Hibernate Query Language(HQL)提供了十分强大的功能,推荐大家使用这种查询方式。HQL具有与SQL语言类似的语法规范,只不过SQL针对表中字段进行查 询,而HQL针对持久化对象,它用来取得对象,而不进行update、delete和insert等操作。而且HQL是完全面向对象的,具备继承、多态和 关联等特性。
1.from子句
from字句是最简单的HQL语句,例如 from Student,也可以写成select s from Student s。它简单地返回Student类的所有实例。
除了Java类和属性的名称外,HQL语句对大小写并不敏感,所以在上一句HQL语句中,from与FROM是相同的,但是Student 与student就不同了,所以上述语句写成from student就会报错。下列程序演示如何通过执行from语句取得所有的Student对象。
Query query = session.createQuery(“from Student”);List list = query.list();for (int i=0;i<list.size(); i++){Student stu = (Student)list.get(i);System.out.println(stu.getName());}Query query = session.createQuery(“select s.name from Student s”);List list = query.list();for (int i=0;i<list.size(); i++) {String name = (String)list.get(i);System.out.println(ame());session.createQuery(“select s.name, s.sex from Student as s”);List list = query.list();for (int i=0;i<list.size(); i++) {Object obj[] = (Object[])list.get(i);Query query = session.createQuery(“select new Student(s.name, s.sex) from Student s”);List list = query.list();for (int i=0;i<list.size(); i++) {Student stu = (Student)list.get(i);System.out.println(stu.getName());public Student(String name, String sex){this.name = name;this.sex = sex;}from Group g where 22<all (select s.age from g.students s)下述语句返回在所有学生中有一个学生的年龄等于22的班级:from Group g where 22=any (select s.age from g.students s)或者from Group g where 22=some (select s.age from g.students s)或者from Group g where 22 in (select s.age from g.students s)
Student stu = null; //声明Student实例Group group = null; //声明Group实例Query query = session.createQuery("from Group g join g.students");List list = query.list();Object obj[] = null; //声明对象数组for(int i=0;i<list.size();i++) {obj = (Object[])list.get(i); //取得集合中的第i个数组group = (Group)obj[0]; //group是数组中第一个对象stu = (Student)obj[1]; //stu是数组中第二个对象System.out.println(stu.getName() + "属于:" +group.getName() );}……//提交事务,关闭Session