HQL查询从表中获取所有名称

时间:2012-07-30 11:13:41

标签: hibernate hql

我有一个 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  
    }

2 个答案:

答案 0 :(得分:4)

您需要名称,名称是字符串,因此您不需要List<StudentRecord>,而是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,这是一个复杂的框架。

答案 1 :(得分: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;