2011-12-15 48 views
19

這是錯誤休眠拋出奇怪的錯誤:類沒有映射

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項目)

這是

<?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.cfg.xml中,我已經測試了

這是在我的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); 
    } 
} 

靜態初始化,這是我使用了一個SessionFactory的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; 
}  

這是堆棧跟蹤

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

你可以顯示「付款」類嗎?它是如何註釋的? – axtavt 2011-12-15 18:26:15

+0

相關:http://stackoverflow.com/questions/14446048/hibernate-table-not-mapped-error – Gray 2016-07-20 15:48:39

回答

26

我所期待的兩件事情之一是原因:

  1. 要麼你沒有在你的hibernat所列付款。 cfg.xml或者你在哪裏配置你的映射類。

  2. 另一個原因可能是javax Entity和org.hibernate .... Entity之間的混淆。確保你使用第一個。

+0

那麼,先生,@Entity註釋_was_其實org.hibernate ...我已經改變它爲javax.persistence 。實體。結果列表仍然是空的。它是空的,因爲表名(以及列名)沒有從camelCase轉換爲camel_case(如數據庫中的下劃線)。如果您可以在此提示我...無論如何感謝 – user1100478 2011-12-15 18:53:56

+3

您可以簡單地在您的實體類 – 2011-12-15 22:47:28

25

而不是

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

試試這個

Query query = session.createQuery("select p from " + Payment.class.getName() + " p"); 
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.*") 

既然不是所有的實體都在實體專門文件夾中。