JSF、JPA应用程序中的SQL查询错误。javax.ejb.EJBException
我试图从我的经理那里获得一个用户计数,从jsf端传递值 //Jsf的重要部分 h:outputText值={bookProviderBean.getCoursesAddedByTP101} //豆角的重要部分JSF、JPA应用程序中的SQL查询错误。javax.ejb.EJBException,java,mysql,sql,jsf,jpa,Java,Mysql,Sql,Jsf,Jpa,我试图从我的经理那里获得一个用户计数,从jsf端传递值 //Jsf的重要部分 h:outputText值={bookProviderBean.getCoursesAddedByTP101} //豆角的重要部分 public IBOOKProviderManager getBookProviderrManager() { return bookProviderManager; } public long getCoursesAddedByTP(Integer bookProviderId
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的课程中选择COUNT*作为总计;
query.setParametertpID,bookProviderId
这是生成的错误:
原因:java.lang.IllegalArgumentException:在EntityManager中创建查询时发生异常:
异常描述:语法错误解析[从课程c中选择COUNT*作为总计,其中c.book\u provider\u id=101]。
[13,13]算术表达式中缺少左表达式。
[14,14]算术表达式中缺少正确的表达式
非常感谢EJB容器在JPQL查询的语法中遇到了问题。要根据图书供应商统计课程数量,您可以使用常用的方法来计算集合的大小:
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;
}
在查询中使用之前,bookProviderId的值是多少?这不是JSF问题,请删除JSF标记。请记住,JPQL-MYSQL:您不能使用*语法。该值由JSF提供。