HQL查询中的问题?

时间:2014-05-22 08:02:33

标签: java hibernate hql

这是一个测试程序。数据库中的表是具有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对象,则不会从数据库中检索数据,为什么?反之,一切正常。

3 个答案:

答案 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