我正在尝试从我的Manager获取用户数,从jsf端传递值。
// Jsf的重要部分
h:outputText value =“#{bookProviderBean.getCoursesAddedByTP(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;
}
“SELECT COUNT(*)AS FROM 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]算术表达式中缺少正确的表达式。
非常感谢
答案 0 :(得分:0)
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;
}