这是一个测试程序。数据库中的表是具有id和name作为列的学生。 POJO类是具有id和名称作为属性的Student
servlet1中使用的HQL查询是:
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查询是:
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对象,则不会从数据库中检索数据,为什么?反之,一切正常。
答案 0 :(得分:0)
因为当您调用l=ses.createQuery("from Student").list();
时,您正在从数据库中检索完整的列集,并且可以正确地实例化Student
类。
答案 1 :(得分:0)
Servlet 1&amp; 2:
List<Student> l = ses.createQuery("select s.id, s.name from Student s").list();
该查询是对象的返回列表,因此您需要提到您将要检索的对象类型。
它返回学生&lt; Id,名称&gt;对象
ses.createQuery("select s.id, s.name from Student s").list();
如果您尝试使用
List<Object> it also return your Student(base object of list) Object.but it not good.so,we specifically mentioned what exact format Object type.
两种情况下,您都需要执行Casting Operation。
List<Student> l =(List<Student>) ses.createQuery("select s.id, s.name from Student s").list();
List<Object> l =(List<Object>) ses.createQuery("select s.id, s.name from Student s").list();
答案 2 :(得分:-1)
您的第一个查询有多个子句无法转换为List,因为id和name是不同的类型。所以它将是List类型。
对于第二个查询,您将返回学生列表,因此您不应将其转换为对象类型,然后再将其转换为学生类型。有关详情,请点击此处链接 - https://weblogs.java.net/blog/2007/04/25/java-persistence-query-return-types。