2

我有一个StudentInfo表,我需要获取表中name列下的所有名称。

谁能帮我在以下功能中纠正我

 @Override
 public List<StudentRecord> getAllStudentNames(){

        Session session = HibernateUtil.getSessionFactory().openSession();

     try {

        List<StudentRecord> smrList = new ArrayList<StudentRecord>();

            String SQL_QUERY = "select smr.studentName from StudentRecord as smr";
        Query query = session.createQuery(SQL_QUERY)  

         smrList  = query.list();



        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            session.flush();
            session.close();
            HibernateUtil.getSessionFactory().close();
        }


        return smrList  
    }
4

2 回答 2

4

你想要名字,而名字是字符串,所以你不想要 a List<StudentRecord>,而是 a List<String>

query.list()方法返回一个List,因此无需创建新的ArrayList,只需将其替换为该方法返回的列表即可。

因此,您只需要以下内容(尊重 Java 命名约定):

String hql = "select smr.studentName from StudentRecord as smr";
Query query = session.createQuery(hql);  
List<String> result = query.list();
return result;

请注意,我将变量命名为hql,而不是sql,因为 HQL 和 SQL 不是同一种语言,而您在这里使用的是 HQL。StudentRecord如果类的持久属性是命名的,则上述查询将起作用studentName。表的名称和列的名称无关紧要,因为 HQL 使用实体进行查询,而不是表。

最后,你不应该捕获异常:它只会隐藏错误。让异常传播给调用者。

看来您缺乏基本的 Java 知识。在使用 Hibernate(一个复杂的框架)之前,我会先从简单的问题开始学习 Java。

于 2012-07-30T11:45:35.967 回答
2

您的查询是正确的,您正在使用select query and select query always return list of object array if more than one column is define in the query or list of a selected column type ,因此您只需要使用您的代码执行以下操作即可正常工作。

List<Object[]> objList = query.list();    
return objList ;

现在您将获得所有名称,迭代objList并将它们设置到您的 smrList

或者

List<String> nameList = query.list();
return nameList;
于 2012-07-30T11:50:19.557 回答