Hibernate抛出奇怪的错误:未映射类

时间:2011-12-15 18:20:54

标签: java hibernate jpa orm hibernate-mapping

这是错误

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

7 个答案:

答案 0 :(得分:29)

我希望有两件事可以成为原因之一:

  1. 您的hibernat.cfg.xml中没有列出付款,也没有配置映射类的位置。

  2. 另一个原因可能是javax ... Entity和org.hibernate ....实体之间的混淆。确保使用第一个。

答案 1 :(得分:28)

而不是

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

试试这个

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

答案 2 :(得分:3)

取消注释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 :(得分:1)

我想你的实体bean没有注册。 在packagesToScan属性中设置实体bean的正确根包名称。 另请检查您的@Table(name =“name_of_your_table”)。

答案 4 :(得分:1)

虽然接受的答案是正确的,但是想在答案的第一部分添加上下文。

在config.java中(或者您在包中命名应用程序配置文件的任何内容),确保您已正确配置了entityScan:

@EntityScan("com.example.*")

但是,如果您希望我们的团队将您的对象移动到他们自己的包中,您可能希望允许扫描所有包文件夹:

.NetStandard

现在并非所有实体都在实体文件夹中。

答案 5 :(得分:0)

对我来说,我的类未列在类部分的Persistence.xml文件中。

这样做可以解决问题。或列出你的课程。

答案 6 :(得分:0)

我有同样的问题,而不是@Entityt映射我 我使用以下代码获取记录 私人@Autowired HibernateTemplate事件HibernateTemplate;

def retail(request):
   videos = Videos.objects.filter(sector="Retail")
   return render(request, 'home.index.html', {'videos': videos})

我使用以下代码进行更新

    List<Map<String, Object>> list = null;
            list = incidentHibernateTemplate.execute(new HibernateCallback<List<Map<String, Object>>>() {

            @Override
            public List<Map<String, Object>> doInHibernate(Session session) throws HibernateException {
                Query query = session.createSQLQuery("SELECT * from table where appcode = :app");
                    query.setParameter("app", apptype);
                query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
                return query.list();

                }
            });