2013-07-10 40 views
0

我一直在使用Netbeans和MySQL工作最近創建Spring + Hibernate的應用程序,但我已經在我的代碼塊中遇到了一些問題:Hibernate問題session.createQuery(來自TableProcess).list();不工作

public List listSystemProcess() { 
     List procesosSistema = null; 
     String hbQuery = "from TableProcess"; 

     try { 
      Session hbSesion = HibernatePersistenceHandler.getSessionFactory().openSession(); 
      Transaction tx = hbSesion.beginTransaction(); 
      Query query = hbSesion.createQuery(hbQuery); 
      procesosSistema = query.list(); 
      tx.commit(); 
      hbSesion.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return procesosSistema; 
    } 

這並不是在所有工作,我得到了一些與SQL語法異常相關的東西,告訴我在「select id2_1,uj8_,5sd_11 from tb_2_1 ...」附近有一個語法錯誤...「

如果我創建了一個SQLQuery而不是HQL,我不覺得有用,因爲我應該爲每個進程執行此操作,而且這很乏味,而且與使用JDBC幾乎相同。

這工作:

String hbQuery = "select p.id,p.nombre,p.descripcion,p.frecuencia_uso,t.nombre " 
     + "from tb_proceso_sistema p inner join tb_tipo_proceso t " 
     + "on p.tb_tipo_proceso_id = t.id"; 
    Query query = hbSesion.createSQLQuery(hbQuery); 

但是當我這樣做,還有,我的JSP修改了一下:

<c:forEach items="${procesosSistema}" var="proceso"> 
       <tr onmouseover="this.style.backgroundColor='#ffff66';" 
      onmouseout="this.style.backgroundColor='#d4e3e5';"> 
        <td><c:out value="${proceso[0]}"/></td> 
        <td><c:out value="${proceso[1]}"/></td> 
        <td><c:out value="${proceso[2]}"/></td> 
        <td><c:out value="${proceso[3]}"/></td> 
        <td><c:out value="${proceso[4]}"/></td> 
        <td></td> 
       </tr> 
      </c:forEach> 

代替:

<c:forEach items="${procesosSistema}" var="proceso"> 
       <tr onmouseover="this.style.backgroundColor='#ffff66';" 
      onmouseout="this.style.backgroundColor='#d4e3e5';"> 
        <td><c:out value="${proceso.id}"/></td> 
        <td><c:out value="${proceso.nombre}"/></td> 
        <td><c:out value="${proceso.descripcion}"/></td> 
        ... 
        <td></td> 
       </tr> 
      </c:forEach> 

當我設置屬性「show_sql」,它顯示了一個奇怪的查詢,如上所示,如下所示:

"select id2_1,uj8_,5sd_11 from SGDP-mysql123.tb_2_1.... tb0" 

如果有人能幫助我請,我會非常感激。

在此先感謝。

回答

1

我有一個疑問,在這裏,你提到

字符串hbQuery = 「從TableProcess」;

你的「TableProcess」類在hbm.xml文件中有一個映射表嗎?

如果您在第二個查詢中使用內部連接,那麼就不能有這樣的映射,只能使用它。

1

如果「TableProcess」類具有的hbm.xml映射和存在於數據庫表,試試這個代碼:

public List listSystemProcess() { 
    List<TableProcess> procesosSistema = null; 
    String hbQuery = "SELECT p FROM TableProcess p"; 

    Session hbSesion = null; 
    try { 
     Session hbSesion =HibernatePersistenceHandler.getSessionFactory().openSession(); 
     Query query = hbSesion.createQuery(hbQuery); 
     procesosSistema = query.list(); 

    } catch (Exception e) { 
     e.printStackTrace(System.err); 
    } finaly{ 
     hbSesion.close(); 
    } 

    return procesosSistema; 
} 
0

嗨大家誰回答這個問題,但它不是與代碼中的問題但由於表和列的名稱,因爲其中大多數包含字符「」,當Hibernate生成查詢時,它使用「」作爲其「編碼」或其「查詢過程」的字符。我的意思是,其中一列被稱爲process_id和frequence_number,但由於該字符不被接受,我需要用processId和頻率編號來替換它(我不知道爲什麼,也許是因爲Hibernate認爲它是編碼的一部分,或者類似的東西)。正如我所提到的,我需要做的是修復表和列的名稱以避免使用「_」,解決這個問題之後,我需要重新生成所有數據庫映射內容並更改新名稱。然後它很有效地工作,希望這個問題可以幫助有同樣問題的人。

感謝大家的答案,當然我試過了,也許他們會在類似的情況下有用。