java - 线程中的异常 "main"org.hibernate.hql.ast.QuerySyntaxException : Users is not mapped [from Users]

标签 java hibernate

我是 hibernate 新手。我正在尝试使用查询类获取数据,但面临问题。我已经查看了 hibernate 论坛但没有找到答案。

实体类:

package com.base.test;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="DBUSER")
public class Users implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="USERID")
    private String userId;

    @Column(name="USERNAME")
    private String userName;

    @Column(name="CREATEDBY")
    private String createdBy;

    @Column(name="CREATEDDATE")
    private Date createdDate;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }


}

测试类:

package com.base.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import com.base.util.HibernateUtil;


public class Test {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        Session session=HibernateUtil.getSessionFactory().openSession();    
        session.beginTransaction();
        Query query = session.createQuery("from Users");
        List<Users> usersList = query.list();
        for(Users user:usersList){
            System.out.println("Id: " + user.getUserId());
            System.out.println("Name: " + user.getUserName());
            System.out.println("Created By: " + user.getCreatedBy());
            System.out.println("Created Date: " + user.getCreatedDate());
        }

    }

}

HibernateUtil 类:

package com.base.util;


import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();


    private static SessionFactory buildSessionFactory() {
        try {
            return new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
        } catch (HibernateException ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }

}

错误日志:

3157 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [materialized_blob] overrides previous : org.hibernate.type.MaterializedBlobType@983d95
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [clob] overrides previous : org.hibernate.type.ClobType@f30494
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [java.sql.Clob] overrides previous : org.hibernate.type.ClobType@f30494
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [materialized_clob] overrides previous : org.hibernate.type.MaterializedClobType@b1cc87
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [wrapper_materialized_blob] overrides previous : org.hibernate.type.WrappedMaterializedBlobType@eaf40c
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [blob] overrides previous : org.hibernate.type.BlobType@13c6641
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [java.sql.Blob] overrides previous : org.hibernate.type.BlobType@13c6641
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [characters_clob] overrides previous : org.hibernate.type.PrimitiveCharacterArrayClobType@5d391d
3160 [main] INFO org.hibernate.type.BasicTypeRegistry - Type registration [wrapper_characters_clob] overrides previous : org.hibernate.type.CharacterArrayClobType@50a649
Dec 14, 2017 3:08:29 PM net.sf.ehcache.config.ConfigurationFactory parseConfiguration
WARNING: No configuration found. Configuring ehcache from ehcache-failsafe.xml  found in the classpath: jar:file:/C:/Suhel's%20Folder/Work/POC/jars/ehcache.jar!/ehcache-failsafe.xml
3288 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: Users is not mapped [from Users]
    at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
    at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111)
    at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
    at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:327)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3441)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3325)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:733)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:584)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
    at com.base.test.Test.main(Test.java:16)

表结构:

desc DBUSER
Name        Null Type         
----------- ---- ------------ 
USERID           VARCHAR2(15) 
USERNAME         VARCHAR2(15) 
CREATEDBY        VARCHAR2(15) 
CREATEDDATE      DATE     

这是 hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1522/DevDB</property>
        <property name="hibernate.connection.username">devWork</property>
        <property name="hibernate.connection.password">dev$123</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>

        <property name="show_sql">true</property>
         <property name="format_sql">true</property>

        <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>  
         <!-- <property name="cache.provider_class">org.hibernate.cache.EhCache</property> -->
        <property name="hibernate.cache.use_second_level_cache">true</property>  

         <mapping class="com.base.test.Users"></mapping>


    </session-factory>
</hibernate-configuration>

有人可以帮我看看我哪里出了问题吗?

最佳答案

我找到了解决方案。

我使用的HQL是:

Query query = session.createQuery("from Users");

相反,它将是

Query query = session.createQuery("from com.base.test.Users");

也就是说,我们必须提供实体的完全限定路径。这与使用该文件的位置无关。也就是说,使用它的文件可以与实体对象位于不同/相同的包中。

当我们使用@NamedQueries时也存在同样的问题。所以下面的错误是:

@NamedQueries({
    @NamedQuery(
    name = "findUsers",
    query = "from Users "
    )
})

以下正确的是:

@NamedQueries({
    @NamedQuery(
    name = "findUsers",
    query = "from com.base.test.Users "
    )
})

关于java - 线程中的异常 "main"org.hibernate.hql.ast.QuerySyntaxException : Users is not mapped [from Users],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47810517/

相关文章:

Java:如何在抽象类中引用子类的静态变量?

Eclipse - JBoss (Hibernate) 工具不显示任何表格

mysql - Tomcat 7 (JBoss EWS 2.0) + MySQL 5.1 + Hibernate - OpenShift - 未找到持久性单元

java - GUI 中的 TinySound 和多次单击(按钮)

java - BCrypt:使用 Spring Security 清空编码密码

java - 如何旋转页面而不是 iText 中的文本?

hibernate - hibernate中的@ManyToAny注解

java - 为什么 Hibernate 创建的连接表阻止我清空表的内容

hibernate - Flyway或Liquibase可以生成更新脚本而不是直接更新数据库吗?

java - Java 的类型删除有什么好处?