2012-07-30 93 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