从表中获取所有名称的 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<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。
【讨论】:
【参考方案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<String>
。仅当您选择多个内容时,它才会返回 List<Object[]>
:select student.name, student.age ...
而且你的第一个代码 sn-p 仍然是错误的,它创建了一个新的 ArrayList 。以上是关于从表中获取所有名称的 HQL 查询的主要内容,如果未能解决你的问题,请参考以下文章