【发布时间】: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。