JSF、JPA应用程序中的SQL查询错误。javax.ejb.EJBException

JSF、JPA应用程序中的SQL查询错误。javax.ejb.EJBException,java,mysql,sql,jsf,jpa,Java,Mysql,Sql,Jsf,Jpa,我试图从我的经理那里获得一个用户计数,从jsf端传递值 //Jsf的重要部分 h:outputText值={bookProviderBean.getCoursesAddedByTP101} //豆角的重要部分 public IBOOKProviderManager getBookProviderrManager() { return bookProviderManager; } public long getCoursesAddedByTP(Integer bookProviderId

我试图从我的经理那里获得一个用户计数,从jsf端传递值

//Jsf的重要部分

h:outputText值={bookProviderBean.getCoursesAddedByTP101}

//豆角的重要部分

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;
}
我也尝试过这样传递参数: 从book_provider_id=:tpID的课程中选择COUNT*作为总计; query.setParametertpID,bookProviderId

这是生成的错误:

原因:java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常: 异常描述:语法错误解析[从课程c中选择COUNT*作为总计,其中c.book\u provider\u id=101]。 [13,13]算术表达式中缺少左表达式。 [14,14]算术表达式中缺少正确的表达式


非常感谢

EJB容器在JPQL查询的语法中遇到了问题。要根据图书供应商统计课程数量,您可以使用常用的方法来计算集合的大小:

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;
}

在查询中使用之前,bookProviderId的值是多少?这不是JSF问题,请删除JSF标记。请记住,JPQL-MYSQL:您不能使用*语法。该值由JSF提供。