我正试图从我的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;
}