2014-04-10 37 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; 
}