2014-04-10 59 views
0

我想從我的管理器中獲取用戶數,從jsf端傳遞值。JSF,JPA應用程序中的SQL查詢錯誤。 javax.ejb.EJBException

//的重要組成部分的JSF

H:的outputText值=「#{bookProviderBean.getCoursesAddedByTP(101)}

//的重要組成部分的豆

public IBOOKProviderManager getBookProviderrManager() { 
    return bookProviderManager; 
} 

public long getCoursesAddedByTP(Integer bookProviderId){ 
    return courseManager.getCoursesAddedByTP(bookProviderId); 
} 

//經理的重要組成部分

public long getCoursesAddedByTP(Integer bookProviderId){ 

    Query query = this.em.createQuery(

    " SELECT COUNT(*) AS total FROM Courses c WHERE c.book_provider_id = " +bookProviderId); 

    long coursesByTP = 0; 

    try { 
     coursesByTP = (Long) query.getSingleResult(); 
    } catch (Exception e) { 
     e.getStackTrace(); 
    } 

    return coursesByTP; 
} 
  • 我也嘗試通過如下參數:

「SELECT COUNT(*)AS FROM courses WHERE book_provider_id =:tpID」); query.setParameter(「tpID」,bookProviderId);

這是所產生的誤差:java.lang.IllegalArgumentException異常:致

異常描述::語法錯誤解析[SELECT COUNT(*)AS總FROM課程而創造的EntityManager查詢時發生異常c WHERE c.book_provider_id = 101]。 [13,13]算術表達式中缺少左表達式。 [14,14]算術表達式中缺少正確的表達式。

感謝很多在JPQL查詢的語法

+0

是什麼bookProviderId前值ü在查詢中使用? –

+1

這不是JSF問題,請移除JSF標記。請記住,JPQL <> MYSQL:你不能使用(*)語法。 – perissf

+0

該值來自JSF。 marcos82

回答

0

EJB容器中遇到的問題。要根據書商計數的課程數目,您可以使用收集的常用方法size()

public long getCoursesAddedByTP(Integer bookProviderId){ 
    Query query = this.em.createQuery( 
     "SELECT c FROM Courses c WHERE c.book_provider_id = :tpID"); 
    query.setParameter("tpID", bookProviderId); 
    long coursesByTP = 0; 
    try { 
     coursesByTP = query.getResultList().size(); // getResultList() and not getSingleResult() 
    } catch (Exception e) { 
     e.getStackTrace(); 
    } 
    return coursesByTP; 
}