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



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

//Jsf 的重要组成部分

h: outputText value="#{bookProviderBean.getCourseAddedByTP(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;
}
  • 我还尝试过这样传递参数:

"从book_provider_id=:tpID的课程中选择计数(*)作为总数");query.setParameter("tpID",bookProviderId);

这是生成的错误:

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

非常感谢

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

相关内容

  • 没有找到相关文章

最新更新