web-dev-qa-db-ja.com

Hibernateは奇妙なエラーをスローします:クラスはマップされていません

これはエラーです

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

このエラーがどのようにスローされるのかわかりません。簡単に説明するように、クラスをマップする必要があります。このような非常に基本的な設定があります: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/ch01.html

マッピング定義をhibernate.cfg.xmlに追加しようとしましたが、プログラムで追加しようとしました。どちらも機能しませんでした。ここで何が欠けているのか教えてもらえますか? (Hibernateプロジェクトを作成したのは初めてではありません)

これは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>

データベース接続が正常に機能していることをテストしました

これは私の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);
    }
}

これは、PaymentIODbクラスでsessionFactoryを使用する場所です。

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

これはスタックトレースです

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

次の2つのうちのいずれかが原因であると予想されます。

  1. hibernat.cfg.xmlに支払いがリストされていないか、マップされたクラスを構成しているところがあります。

  2. もう1つの理由は、javax ... Entityとorg.hibernate .... Entityの間の混乱です。必ず最初のものを使用してください。

31
Jens Schauder

の代わりに

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

これを試して

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

hibernate.cfg.xml構成ファイルのコメント付きマッピングコードのコメントを解除します

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

change it to

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

詳細については、このリンクを参照してください

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

3
sethupathi.t

受け入れられた答えは正しいですが、答えの最初の部分にコンテキストを追加したいと思います。

Config.Java(またはパッケージ内のアプリケーション構成ファイルに名前を付けたもの)内で、entityScanが適切に構成されていることを確認します。

package com.example.config;

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

@EntityScan("com.example.entities")

ただし、チームがオブジェクトを独自のパッケージに移動した場合は、すべてのパッケージフォルダーのスキャンを許可できます。

@EntityScan("com.example.*")

すべてのエンティティが特にエンティティフォルダにあるわけではありません。

1
Mindsect Team

エンティティBeanが登録されていないようです。 packagesToScanプロパティでエンティティBeanの適切なルートパッケージ名を設定します。 @Table(name = "name_of_your_table")も確認してください。

1
Shyam Yadav

私にとって、クラスはクラスセクションのPersistence.xmlファイルにリストされていませんでした。

そのようにして、問題を解決してください。またはクラスがリストされている場所。

0
lordUhuru