我是使用Hibernate和Java的新手。我收到以下异常。我在网上找到关于这个错误的东西似乎没有帮助。有任何想法吗?例外:
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 {
.....
谢谢,
担
答案 0 :(得分:12)
尝试在class
文件的persistence-unit
下添加persistence.xml
元素。
<?xml version="1.0" encoding="UTF-8"?>
<persistence ...>
<persistence-unit name="unit">
<class>com.icesoft.icefaces.samples.datatable.jpa.ApplPerfStats</class>
...
</persistence-unit>
<persistence>
我没有比JPA / EntityManager做得更多,所以我不知道是否有办法添加整个包。 AFAIK,当使用hibernate.cfg.xml
时,必须直接指定每个持久化类。
答案 1 :(得分:6)
在我开始使用完整的班级名称之前,它发生在我身上,例如:
String queryString = "select count(c) from com.my.classes.package.ApplPerfStats c";
但我不喜欢这种方法,因为它的重构 - 不友好。一个更容易处理的问题是:
String queryString = "select count(c) from " + ApplPerfStats.class.getName() + c";
javashlook的解决方案似乎是一个捷径 - 但它增加了更多的XML配置,我试图避免。如果只有基于注释的方式来指定...
答案 2 :(得分:1)
我遇到了同样的问题,我通过在我的pom.xml中添加aspectj条目来解决,见下文。我想如果你使用注释是有道理的。否则,您需要在XML文件中指定映射。我从一个使用带有JPA注释的jar的项目中遇到了这个问题。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.2</version> <!-- NB: do use 1.3 or 1.3.x due to MASPECTJ-90 - wait for 1.4 -->
<dependencies>
<!-- NB: You must use Maven 2.0.9 or above or these are ignored (see MNG-2972) -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<configuration>
<weaveDependencies>
<weaveDependency> <groupId>your.project</groupId> <artifactId>your.artifact</artifactId> </weaveDependency>
</weaveDependencies>
</configuration>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<outxml>true</outxml>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
答案 3 :(得分:0)
您应指定一个列来进行计数
select count(c.someColumn) from ApplPerfStats c
或尝试计数(*)
select count(*) from ApplPerfStats c
答案 4 :(得分:0)
我遇到了这个问题,但在我的情况下问题是由于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。现在它工作正常
答案 5 :(得分:0)
我也面临着这个问题......
您尚未在persistence.xml配置文件中声明您的实体类:
<property name="hibernate.archive.autodetection" value="class, hbm"/>
答案 6 :(得分:0)
我知道这件事情已经很长时间了,但上述答案都没有解决我的问题。
我已经在persistence.xml文件中声明了该实体。 最后,整个问题只是实体名称在我的系统中区分大小写。
这个jpql错了
SELECT u FROM user u WHERE userId = 1?
但这个工作正常
SELECT u FROM 用户 u WHERE userId = 1?