HQL 檢索方式
實(shí)例化查詢結(jié)果
實(shí)例化查詢結(jié)果可以說是對屬性查詢的一種改進(jìn).在使用屬性查詢時(shí)同于使用對象數(shù)組,操作和理解不太方便,如果將一個(gè)object[]中的所有成員封閉成一個(gè)對象就方便多了.
下面的程序?qū)⒉樵兘Y(jié)果進(jìn)行了實(shí)例化:
/*打開Sessio,開戶事務(wù)*/
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());
}
/*提交事務(wù),關(guān)閉Session*/
需要注意的是,Student對象中必須有Student(name,age)的構(gòu)造函數(shù),否則會出錯(cuò),
因?yàn)槌绦蛘{(diào)用new Student(s.name,s.age)語句時(shí)打不到相應(yīng)的構(gòu)造函數(shù).
集合過濾
下面是一個(gè)關(guān)于集合過濾的例子
/*打開Sessio,開戶事務(wù)*/
term = (term)session.get(Term.class,"21fsd54fds41245742");
Query query = sesion.createFilter(term.getStudent(),"where this.age>18");
List list = query.list();
/*提交事務(wù),關(guān)閉Session*/
在使用集合過濾時(shí),需要注意以下幾點(diǎn):
createFilter()方法返回的是Query對象
createFilter()方法的第一個(gè)參數(shù)為一個(gè)持久化對象(必須為持久化狀態(tài),
臨時(shí)或者脫管對象都是不行的)的集合.
/*打開Sessio,開戶事務(wù)*/
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();
/*提交事務(wù),關(guān)閉Session*/
此段程序查出的學(xué)生對象并不包含剛剛所添加的學(xué)生對象,即使他的年齡是符合條件的