2011-12-15 5 views
19

にマッピングされていない私は、このエラーがスローされますどのように来る理解していない私は簡単にあなたが表示されますよう、クラスがマップされる必要があります。 http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/ch01.htmlHibernateは奇妙なエラーがスローされます。クラスは、これはエラー</p> <pre><code>org.hibernate.hql.ast.QuerySyntaxException: Payment is not mapped [select p from Payment p] </code></pre> <p>ある

マップ定義をhibernate.cfg.xmlに追加しようとしましたが、プログラムで追加しようとしました。どちらも働いていませんでした。誰も私にここで何が欠けているのか教えてもらえますか?これは、データベース接続が正常に動作している、私は

これがあることをテストしている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> 

ある

(それは私が一緒にHibernateのプロジェクトを入れて初めてではありません)私はPaymentIODbクラスでSessionFactoryのを使用し、静的私の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); 
    } 
} 

で初期化し、これは次のとおりです。

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 
+0

'Payment'クラスを表示できますか?どのように注釈付けされていますか? – axtavt

+0

関連:http://stackoverflow.com/questions/14446048/hibernate-table-not-mapped-error – Gray

答えて

26

である私は、2つのいずれかが理由であることを期待したい:

  1. あなたhibernatに記載されている支払いを持っていないのいずれか。 cfg.xmlまたはマップされたクラスを設定した場所。

  2. もう一つの理由は、javax ...エンティティとorg.hibernate ....エンティティの混乱の可能性があります。最初のものを必ず使用してください。詳細については、

+0

さて、サークル、@Entityアノテーションは実際にはorg.hibernateです...私はjavax.persistenceに変更しました。エンティティ。しかし、結果リストはまだ空です。テーブル名(およびカラム名)がcamelCaseからcamel_case(データベース内の下線)に変換されないため、空です。とにかくお付き合いいただきありがとうございました – user1100478

+3

エンティティクラス –

25

代わりのhibernate.cfg.xmlの設定ファイルの

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

コメントマッピングコードのコメントを外し、この

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

Tahnksで@Table(name = "camel_case")を使用するだけで、エラーを排除できます!返されるリストは空であり、ログにはWARNがありますが、 '2011-12-15 19:39:39,246 [http-8080-2] WARN org.hibernate.hql.QuerySplitter - クエリクラスの永続クラスが見つかりません: com.lsyh.swati.zk.model.Payment p' – user1100478

+1

からpを選択してください。支払いクラスをチェックしてください。エンティティはjavax.persistence.Entityから来て、テーブルはjavax.persistence.Tableから来るはずです。休止状態のパッケージから注釈を使用しないでください – mprabhat

+0

あなたの答えをありがとう、私は同じ結果を持っていたので私はJensの答えを受け入れましたが、それは私に何か問題があることを幾分明らかにしました。とにかくありがとう! – user1100478

2

を試してみてください

<!-- <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

+0

OPは注釈付きクラスを使用しているので、なぜ設定ファイルからコメントを外すのですか? – mprabhat

+1

eventhough注釈付きクラスでは、上記のように構成ファイルにマップする必要があります。 –

1

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

0

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

これを解決するにはどうすればよいですか。またはあなたのクラスがリストされているどこにでも。

1

回答が正しいとはいえ、回答の最初の部分に文脈を追加したいと思います。あなたのconfig.javaの内部

(またはあなたがパッケージで、アプリケーションの設定ファイルを命名しているものは何でも)、あなたは正しくentityScanを設定していることを確認:あなたは私たちのチームが好きなら

package com.example.config; 

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

@EntityScan("com.example.entities") 

は、しかし、あなたのオブジェクトを移動しました自分のパッケージに、あなたはすべてのパッケージフォルダのスキャンを可能にすることもできます。

@EntityScan("com.example.*") 

今ではない、すべてのエンティティがエンティティであることを、具体的フォルダ。

関連する問題

 関連する問題