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