Java org.hibernate.hql.ast.QuerySyntaxException与hibernate

Java org.hibernate.hql.ast.QuerySyntaxException与hibernate,java,hibernate,Java,Hibernate,我不熟悉用Java来使用Hibernate。我得到以下异常。我在网上找到的关于这个错误的东西似乎没有帮助。有什么想法吗?例外情况: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: ApplPerfStats is not mapped [select count(c) from ApplPerfStats c] at org.hibernate.ejb.AbstractEn

我不熟悉用Java来使用Hibernate。我得到以下异常。我在网上找到的关于这个错误的东西似乎没有帮助。有什么想法吗?例外情况:

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 {
.....
谢谢


Tam

您应该指定一列进行计数

select count(c.someColumn) from ApplPerfStats c
或者尝试计数(*)


尝试在
persistence.xml
文件中的
persistence单元下添加
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>

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

我在JPA/EntityManager上没有做更多的工作,所以我不知道是否有办法添加整个包。好的,当使用
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配置,我试图避免这种情况。如果有一种基于注释的方法来指定…

我也遇到了同样的问题,我通过将aspectj条目添加到pom.xml中解决了这个问题,请参见下文。如果您使用注释,我想这是有意义的。否则,您需要在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>

org.codehaus.mojo
aspectj maven插件
1.2
org.aspectj
aspectjrt
${aspectj.version}
org.aspectj
aspectjtools
${aspectj.version}
您的.project.your.artifact
编译
测试编译
真的
org.springframework
春季方面
1.6
1.6

我遇到了这个问题,但就我而言,这个问题是由gradle版本造成的。

当我将我的系统从linux改为mac时,我不得不从gradle-1.0-milestone-3切换到gradle-1.0-milestone-4,因为milestone-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是错误的

从用户中选择u,其中userId=1

但是这个很好用

从用户中选择u,其中userId=1


谢谢你,迈克。我尝试了这两种方法,但仍然得到了相同的异常:(确保注释中没有遗漏任何内容。仔细查看后,Hibernate似乎认为类没有映射到表。
<property name="hibernate.archive.autodetection" value="class, hbm"/>