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

Posted

技术标签:

【中文标题】从表中获取所有名称的 HQL 查询【英文标题】:HQL query to get all name from a table 【发布时间】:2012-07-30 11:13:40 【问题描述】:

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

谁能帮我在下面的函数中纠正我

 @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  
    

【问题讨论】:

【参考方案1】:

你想要名字,而名字是字符串,所以你不需要List&lt;StudentRecord&gt;,而是List&lt;String&gt;

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。

【讨论】:

【参考方案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;

【讨论】:

你错了。如上返回单个属性的查询将返回List&lt;String&gt;。仅当您选择多个内容时,它才会返回 List&lt;Object[]&gt;select student.name, student.age ... 而且你的第一个代码 sn-p 仍然是错误的,它创建了一个新的 ArrayList 。

以上是关于从表中获取所有名称的 HQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

hql 查询以获取数据和金额总和

查询以从表中仅获取一项

如何从表中获取所有数据,包括表 ID

从表中获取全部内容

是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?

从表中获取特定用户的所有行以及总和