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

Tam*_*Tam 12 java 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)
Run Code Online (Sandbox Code Playgroud)

这叫做的地方:

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

映射到数据库表的类:

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 {
.....
Run Code Online (Sandbox Code Playgroud)

谢谢,

jav*_*ook 12

尝试在文件中添加一个class元素.persistence-unitpersistence.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>
Run Code Online (Sandbox Code Playgroud)

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


che*_*rbr 6

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

String queryString = "select count(c) from com.my.classes.package.ApplPerfStats c";
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这种方法,因为它的重构 - 不友好.更易处理的是:

String queryString = "select count(c) from " + ApplPerfStats.class.getName() +  c";
Run Code Online (Sandbox Code Playgroud)

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