簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM