Error extraño: La clase no está asignada


Este es el error

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

No entiendo por qué se lanza este error, la clase debe mapearse como le mostraré brevemente. Tengo una configuración muy básica, como esta: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/ch01.html

He intentado añadir la definición de asignación a hibernate.cfg.xml y yo también hemos intentado añadirlo mediante programación. Ninguno de ellos funcionó. ¿Alguien podría decirme qué me estoy perdiendo aquí? (no es la primera tiempo que armé un proyecto de Hibernación)

Esta es la hibernación.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>

La conexión a la base de datos está funcionando bien, he probado que

Este es el inicializador estático en mi 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);
    }
}

Y aquí es donde uso la SessionFactory en la clase PaymentIODb:

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;
}    

Esta es la traza de pila

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
Author: Jens Schauder, 2011-12-15

6 answers

Espero que una de dos cosas sea la razón:

  1. O bien no tiene el Pago listado en su hibernat.cfg.xml o donde quiera que config de sus clases asignadas.

  2. Otra razón podría ser la confusión entre javax...Entidad y org.hibernación....Entidad. Asegúrate de usar el primero.

 28
Author: Jens Schauder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-12 09:42:55

En lugar de

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

Prueba esto

Query query = session.createQuery("select p from " + Payment.class.getName() + " p");
 27
Author: mprabhat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-15 18:27:30

Descomente el código de asignación comentado en hibernate.cfg.archivo de configuración xml

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

change it to

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

Para más información consulte este enlace

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

 3
Author: sethupathi.t,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-15 18:52:03

Su entidad bean no se está registrando, supongo. Establezca el nombre de paquete raíz adecuado de su entidad beans en la propiedad packagesToScan. También comprueba tu @Table (name = "name_of_your_table").

 1
Author: Shyam Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-22 12:17:37

Aunque la respuesta aceptada es correcta, quisiera agregar contexto a la primera parte de la respuesta.

Dentro de su configuración.java (o como sea que haya nombrado el archivo de configuración de su aplicación en los paquetes), asegúrese de haber configurado correctamente su entityScan:

package com.example.config;

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

@EntityScan("com.example.entities")

Sin embargo, si le gusta que nuestro equipo haya movido sus objetos a sus propios paquetes, es posible que desee permitir un análisis de todas las carpetas de paquetes:

@EntityScan("com.example.*")

Ahora que no todas las entidades están en la carpeta entidades concretamente.

 1
Author: Mindsect Team,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-01 12:17:47

Para mí, mi Clase no estaba en mi Persistencia.archivo xml en la sección clase.

Hacer eso para resolver el ish. o donde estén tus clases.

 0
Author: lordUhuru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-18 16:06:31