Issue in HQL queries?
这是一个测试程序。数据库中的表是具有ID和名称作为列的学生。 POJO班级是学生,其id和名称为properties
servlet1中使用的HQL查询为:
1 2 3 4 5 6 7 8 9 10 11 12 | List<Student> l = ses.createQuery("select s.id, s.name from Student s").list(); out.println("Database students are as follows:<br/>"); Iterator it= l.iterator(); while(it.hasNext()) { Object o[]= (Object[]) it.next(); out.println("Student id is :"+o[0]); out.println("<br/>"); out.println("Student name is :"+o[1]); out.println("<br/>"); } |
servlet2中的
HQL查询为:
1 2 3 4 5 6 7 8 9 10 11 | List<Student> l=ses.createQuery("from Student").list(); out.println("Database students are as follows:<br/>"); Iterator it= l.iterator(); while(it.hasNext()) { Student s= (Student) it.next(); out.println("Student id is :"+s.getId()); out.println("<br/>"); out.println("Student name is :"+s.getName()); out.println("<br/>"); } |
在servlet1中,如果我使用Student对象而不是Object类对象,为什么没有从数据库中检索数据呢?反之,一切都很好。
在sevlet2中,如果我使用Object类对象而不是Student对象,为什么没有从数据库中检索数据呢?反之,一切都很好。
Servlet 1
因为当您调用
您的第一个查询具有多个子句,您不能将其转换为List,因为id和name是不同的类型。因此它将是列表类型。
对于第二个查询,您正在返回学生列表,因此您不应将其转换为"对象类型",然后再次转换为"学生类型"。有关更多信息,请单击此处的链接-https://weblogs.java.net/blog/2007/04/25/java-persistence-query-return-types。