wake-up-neo.com

Der Ruhezustand löst einen seltsamen Fehler aus: Die Klasse wird nicht zugeordnet

das ist der fehler

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

Ich verstehe nicht, wie dieser Fehler ausgelöst wird. Die Klasse sollte zugeordnet werden, da ich Sie kurz zeigen werde. Ich habe eine sehr einfache Konfiguration wie diese: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/ch01.html

Ich habe versucht, die Zuordnungsdefinition in hibernate.cfg.xml einzufügen, und ich habe auch versucht, sie programmgesteuert hinzuzufügen. Keiner von ihnen arbeitete. Kann mir jemand sagen, was ich hier vermisse? (es ist nicht das erste Mal, dass ich ein Hibernate-Projekt zusammenstelle)

dies ist die 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>

die Datenbankverbindung funktioniert einwandfrei, das habe ich getestet

dies ist der statische Initialisierer in meinem 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);
    }
}

und hier verwende ich die sessionFactory in der Klasse 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;
}    

dies ist die Stapelverfolgung

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
23
user1100478

Ich würde erwarten, dass einer der Gründe zwei Gründe hat:

  1. entweder haben Sie in Ihrer hibernat.cfg.xml keine Zahlung aufgelistet, oder wo auch immer Sie Ihre zugeordneten Klassen konfigurieren.

  2. ein weiterer Grund könnte die Verwirrung zwischen Javax ... Entity und org.hibernate .... Entity sein. Stellen Sie sicher, dass Sie die erste verwenden.

28
Jens Schauder

Anstatt 

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

versuche dies

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

kommentieren Sie den kommentierten Zuordnungscode in der Konfigurationsdatei hibernate.cfg.xml

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

change it to

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

weitere Informationen finden Sie unter diesem Link

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

3
sethupathi.t

Obwohl die akzeptierte Antwort korrekt ist, möchte ich dem ersten Teil der Antwort Kontext hinzufügen. 

Stellen Sie in Ihrer config.Java (oder wie auch immer Sie Ihre Anwendungskonfigurationsdatei in Paketen benannt haben) sicher, dass Sie Ihre entityScan ordnungsgemäß konfiguriert haben:

package com.example.config;

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

@EntityScan("com.example.entities")

Wenn Sie jedoch möchten, dass unser Team Ihre Objekte in eigene Pakete verschoben hat, möchten Sie möglicherweise eine Überprüfung aller Paketordner zulassen:

@EntityScan("com.example.*")

Nun befinden sich nicht alle Entitäten speziell im Entitätsordner.

1
Mindsect Team

Ihre Entity-Bean wird nicht registriert. Ich denke, Sie legen den richtigen Root-Paketnamen Ihrer Entity-Beans in packagesToScan-Eigenschaft fest. __ Überprüfen Sie auch Ihre @Table (name = "name_of_your_table").

1
Shyam Yadav

Für mich wurde meine Klasse nicht in meiner Persistence.xml-Datei im Klassenabschnitt aufgeführt. 

Tu das, um das ish zu lösen. oder wo auch immer Ihre Klassen aufgelistet sind.

0
lordUhuru