繁体   English   中英

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

[英]SQL Query error in JSF, JPA application. javax.ejb.EJBException

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

// Jsf的重要部分

h:outputText value =“#{bookProviderBean.getCoursewegoByTP(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;
}
  • 我也尝试像这样传递参数:

“从课程WHERE book_provider_id =:tpID”中总共选择COUNT(*)个“); query.setParameter(“ tpID”,bookProviderId);

这是生成的错误:

由以下原因引起:java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:异常描述:语法错误解析[SELECT COUNT(*)AS总计FROM课程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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM