Hibernate throws strange error: Class is not mapped

82,004

Solution 1

I'd expect one of two things to be the reason:

  1. either you don't have Payment listed in your hibernat.cfg.xml or where ever you config your mapped classes.

  2. another reason might be the confusion between javax...Entity and org.hibernate....Entity. Make sure you use the first one.

Solution 2

Instead of

Query query = session.createQuery("select p from Payment p");

try this

Query query = session.createQuery("select p from " + Payment.class.getName() + " p");

Solution 3

uncomment the commented mapping code in hibernate.cfg.xml config file

<!--  <mapping class="com.lsyh.swati.zk.model.Payment"/> -->

change it to

<mapping class="com.lsyh.swati.zk.model.Payment"/>

for more information refer this link

http://www.javabeat.net/tips/112-configure-mysql-database-with-hibernate-mappi.html

Solution 4

Your entity bean is not getting registered i guess. Set proper root package name of your entity beans in packagesToScan property. Also check your @Table(name="name_of_your_table").

Solution 5

Although accepted answer is correct, would like to add context to the first part of the answer.

Inside of your config.java (or whatever you have named your application configuration file in packages), ensure you have properly configured your entityScan:

package com.example.config;

import org.springframework.boot.autoconfigure.domain.EntityScan;

@EntityScan("com.example.entities")

However, if you like our team have moved your objects into their own packages, you may want to allow for a scan of all package folders:

@EntityScan("com.example.*")

Now that not all entities are in the entities folder specifically.

Share:
82,004
user1100478
Author by

user1100478

Updated on July 09, 2022

Comments

  • user1100478
    user1100478 almost 2 years

    this is the error

    org.hibernate.hql.ast.QuerySyntaxException: Payment is not mapped [select p from Payment p]
    

    I don't understand how come this error is thrown, the class should be mapped as I will show you briefly. I have a very basic config, like this one: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/ch01.html

    I have tried to add the mapping definition into hibernate.cfg.xml and I have also tried to add it programmatically. Neither of them worked. Could anybody tell me what am I missing here? (it is not the first time I put together a Hibernate project)

    this is the 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.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/paymentsdatabase</property>
        <property name="hibernate.connection.username">xxx</property>
        <property name="hibernate.connection.password">xxx</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.current_session_context_class">thread</property>
    
        <property name="hibernate.hbm2ddl.auto">create</property>
    
        <!--  <mapping class="com.lsyh.swati.zk.model.Payment"/> -->
      </session-factory>
    </hibernate-configuration>
    

    the database connection is working fine, I have tested that

    this is the static initializer in my HibernateUtil

    static {
        try {
    
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration()
                .addPackage("com.lsyh.swati.zk.model")
                .addAnnotatedClass(Payment.class)
                .configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed. " + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    

    and this is where I use the sessionFactory in the PaymentIODb class:

    public static List<Payment> readDataFromDb(){
            StatelessSession session = StoreHibernateUtil.getSessionFactory().openStatelessSession();
            Query query = session.createQuery("select p from Payment p");
            List<Payment> payments = query.list();
            session.close();
            return payments;
    }    
    

    this is the stack trace

    org.hibernate.hql.ast.QuerySyntaxException: Payment is not mapped [select p from Payment p]
        at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
        at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
        at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
        at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
        at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
        at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
        at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
        at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
        at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
        at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
        at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
        at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
        at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
        at com.lsyh.swati.zk.controller.PaymentIODb.readDataFromDb(PaymentIODb.java:35)
        at com.lsyh.swati.zk.controller.PaymentIODb.resolveVariable(PaymentIODb.java:20