关于java:HQL查询中的问题?

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


因为当您调用l=ses.createQuery("from Student").list();时,您正在从数据库中检索完整的列集,因此可以正确地实例化Student类。


您的第一个查询具有多个子句,您不能将其转换为List,因为id和name是不同的类型。因此它将是列表类型。

对于第二个查询,您正在返回学生列表,因此您不应将其转换为"对象类型",然后再次转换为"学生类型"。有关更多信息,请单击此处的链接-https://weblogs.java.net/blog/2007/04/25/java-persistence-query-return-types。