[英]org.hibernate.hql.ast.QuerySyntaxException with Hibernate
我是使用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 {
.....
謝謝,
譚
嘗試在persistence.xml
文件中的persistence-unit
下添加一個class
元素。
<?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
,必須直接指定每個持久化類。
在我開始使用完整的類名之前,它發生在我身上,例如:
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的項目中遇到了這個問題。
<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>
我遇到了這個問題,但在我的情況下問題是由於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配置文件中聲明您的實體類:
<property name="hibernate.archive.autodetection" value="class, hbm"/>
我知道這件事已經很長時間了,但上述答案都沒有解決我的問題。
我已經在persistence.xml文件中聲明了該實體。 最后,整個問題只是實體的名稱在我的系統上區分大小寫 。
這個jpql錯了
SELECT u FROM user u WHERE userId = 1?
但是這個工作正常
SELECT u FROM User u WHERE userId = 1?
您應該指定一個列來進行計數
select count(c.someColumn) from ApplPerfStats c
或嘗試計數(*)
select count(*) from ApplPerfStats c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.