JSF,JPA应用程序中的SQL Query错误。 javax.ejb.EJBException异常

时间:2014-04-10 08:39:03

标签: java mysql sql jsf jpa

我正在尝试从我的Manager获取用户数,从jsf端传递值。

// Jsf的重要部分

h:outputText value =“#{bookProviderBean.getCoursesAddedByTP(101)}

// Bean的重要部分

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 FROM Courses WHERE book_provider_id =:tpID”); query.setParameter(“tpID”,bookProviderId);

这是产生的错误:

引起:java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常: 异常描述:语法错误解析[SELECT COUNT(*)AS total FROM Courses c WHERE c.book_provider_id = 101]。 [13,13]算术表达式中缺少左表达式。 [14,14]算术表达式中缺少正确的表达式。

非常感谢

1 个答案:

答案 0 :(得分:0)

EJB容器在JPQL查询的语法中遇到问题。要根据图书提供者计算课程数量,您可以使用该集合的常用方法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;
}