【问题标题】:SQL Query error in JSF, JPA application. javax.ejb.EJBExceptionJSF、JPA 应用程序中的 SQL 查询错误。 javax.ejb.EJBException
【发布时间】:2014-05-23 20:31:56
【问题描述】:

我正在尝试从我的经理那里获取用户计数,并从 jsf 端传递值。

// Jsf的重要部分

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

// Bean的重要部分

public IBOOKProviderManager getBookProviderrManager() {
    return bookProviderManager;
}

public long getCoursesAddedByTP(Integer bookProviderId){
    return courseManager.getCoursesAddedByTP(bookProviderId);
}

//Manager的重要部分

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 total 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] 算术表达式中缺少正确的表达式。

非常感谢

【问题讨论】:

  • 您在查询中使用之前 bookProviderId 的值是多少?
  • 这不是 JSF 问题,请去掉 JSF 标签。请记住 JPQL MYSQL:您不能使用 (*) 语法。
  • 该值来自 JSF。

标签: java mysql sql jsf jpa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-10-25
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多