带有Hibernate的org.hibernate.hql.ast.QuerySyntaxException

我是使用Hibernate和Java的新手。 我收到以下exception。 我在网上找到关于这个错误的东西似乎没有帮助。 有任何想法吗? 例外情况:

java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: ApplPerfStats is not mapped [select count(c) from ApplPerfStats c] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:601) at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96) at com.icesoft.icefaces.samples.datatable.jpa.CustomerDAO.findTotalNumberCustomers(CustomerDAO.java:89) at com.icesoft.icefaces.samples.datatable.ui.SessionBean.getDataPage(SessionBean.java:189) at com.icesoft.icefaces.samples.datatable.ui.SessionBean.access$0(SessionBean.java:185) at com.icesoft.icefaces.samples.datatable.ui.SessionBean$LocalDataModel.fetchPage(SessionBean.java:245) at com.icesoft.icefaces.samples.datatable.ui.PagedListDataModel.getPage(PagedListDataModel.java:121) at com.icesoft.icefaces.samples.datatable.ui.PagedListDataModel.getRowCount(PagedListDataModel.java:100) at com.icesoft.faces.component.datapaginator.DataPaginator.isModelResultSet(DataPaginator.java:1091) at com.icesoft.faces.component.datapaginator.DataPaginatorRenderer.encodeBegin(DataPaginatorRenderer.java:201) 

这叫做的地方:

 @SuppressWarnings("unchecked") public Long findTotalNumberCustomers() { EntityManagerHelper.log("finding number of Customer instances", Level.INFO, null); try { String queryString = "select count(c) from ApplPerfStats c"; return (Long) getEntityManager().createQuery(queryString).getSingleResult(); } catch (RuntimeException re) { EntityManagerHelper.log("find number of Appl_perf_stats failed", Level.SEVERE, re); throw re; } } 

映射到数据库表的类:

 package com.icesoft.icefaces.samples.datatable.jpa; import java.sql.Timestamp; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "Appl_perf_stats", uniqueConstraints = {}) public class ApplPerfStats implements java.io.Serializable { ..... 

谢谢,

尝试在persistence.xml文件中的persistence-unit下添加一个class元素。

    com.icesoft.icefaces.samples.datatable.jpa.ApplPerfStats ...   

我没有做过比JPA / EntityManager更多的东西,所以我不知道是否有办法添加整个包。 AFAIK,当使用hibernate.cfg.xml ,必须直接指定每个持久化类。

在我开始使用完整的类名之前,它发生在我身上,例如:

 String queryString = "select count(c) from com.my.classes.package.ApplPerfStats c"; 

但我不喜欢这种方法,因为它的重构 – 不友好。 一个更容易处理的是:

 String queryString = "select count(c) from " + ApplPerfStats.class.getName() + c"; 

javashlook的解决方案似乎是一个快捷方式 – 但它增加了更多的XML配置,我试图避免。 如果只有基于注释的方式来指定…

我遇到了同样的问题,我通过在我的pom.xml中添加aspectj条目来解决,见下文。 我想如果你使用注释是有道理的。 否则,您需要在XML文件中指定映射。 我从一个使用带有JPA注释的jar的项目中遇到了这个问题。

   org.codehaus.mojo aspectj-maven-plugin 1.2     org.aspectj aspectjrt ${aspectj.version}   org.aspectj aspectjtools ${aspectj.version}        your.project your.artifact     compile test-compile     true   org.springframework spring-aspects   1.6 1.6   

您应该指定一个列来进行计数

 select count(c.someColumn) from ApplPerfStats c 

或尝试计数(*)

 select count(*) from ApplPerfStats c 

我遇到了这个问题,但在我的情况下问题是由于gradle版本。
当我将系统从linux更改为mac时,我不得不从gradle-1.0-milestone-3切换到gradle-1.0-milestone-4,因为里程碑-3在OSX中不起作用。 在gradle-1.0-milestone-4中我遇到了同样的问题,然后我不得不将我的gradle版本降级为gradle-1.0-milestone-1。 现在它工作正常

我也面临这个问题,由此解决…

您尚未在persistence.xml配置文件中声明您的实体类:

  

我知道这件事已经很长时间了,但上述答案都没有解决我的问题。

我已经在persistence.xml文件中声明了该实体。 最后,整个问题只是实体的名称在我的系统中区分大小写

这个jpql错了

SELECT u FROM user u WHERE userId = 1?

但这个工作正常

SELECT u FROM User u WHERE userId = 1?