2012-07-30 61 views
2

得到所有的名字,我有一个StudentInfo表,我需要在表格列获取所有HQL查询从表中

任何一个可以帮助我纠正我在下面的功能

@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

你想要的名称,名称是字符串,所以你不想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 queryor list of a selected column type 所以你只需要用你的代码做下面的工作就可以了。

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

现在你会得到所有的名字,迭代objList并将其设置为您smrList

List<String> nameList = query.list(); 
return nameList; 
+1

你错了。如上返回单个属性的查询将返回一个'List '。只有当你选择了多个东西时,它才会返回一个'List ':'select student.name,student.age ...' – 2012-07-30 11:53:32

+0

是@JB Nizet,我更新了 – subodh 2012-07-30 11:56:01

+2

而你的第一个代码片段仍然是错误的,它会创建一个新的ArrayList为空。 – 2012-07-30 11:57:21