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
org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/paymentsdatabase xxx xxx true thread create <!-- -->
数据库连接工作正常,我已经测试过了
这是我的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 readDataFromDb(){ StatelessSession session = StoreHibernateUtil.getSessionFactory().openStatelessSession(); Query query = session.createQuery("select p from Payment p"); List 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.(HQLQueryPlan.java:77) at org.hibernate.engine.query.HQLQueryPlan.(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
我希望有两个原因之一是:
-
要么您没有在hibernat.cfg.xml中列出付款,要么在您配置映射类的位置。
-
另一个原因可能是javax之间的混淆……实体和org.hibernate ….实体。 确保使用第一个。
代替
Query query = session.createQuery("select p from Payment p");
尝试这个
Query query = session.createQuery("select p from " + Payment.class.getName() + " p");
取消注释hibernate.cfg.xml配置文件中的注释映射代码
change it to
有关更多信息,请参阅此链接
http://www.javabeat.net/tips/112-configure-mysql-database-with-hibernate-mappi.html
我想你的实体bean没有注册。 在packagesToScan属性中设置实体bean的正确根包名称。 还要检查你的@Table(name =“name_of_your_table”)。
虽然接受的答案是正确的,但是想在答案的第一部分添加上下文。
在config.java中(或者您在包中命名应用程序配置文件的任何内容),确保您已正确配置了entityScan:
package com.example.config; import org.springframework.boot.autoconfigure.domain.EntityScan; @EntityScan("com.example.entities")
但是,如果您希望我们的团队将您的对象移动到他们自己的包中,您可能希望允许扫描所有包文件夹:
@EntityScan("com.example.*")
现在并非所有实体都在实体文件夹中。
对我来说,我的类未列在类部分的Persistence.xml文件中。
这样做可以解决问题。 或列出您的课程的任何地方。
- org.hibernate.PersistentObjectException:传递给持久exception的分离实体
- Spring Data配置 – 找不到hibernate.properties
- 没有xml的spring + hibernate映射类
- Spring:缺少JPA Metamodel
- 一般来说哪种Java ORM被认为是性能最高的?
- 如何使用Hibernate Envers检索带有@ManyToOne关系的审计寄存器
- 在Hibernate上更新分离对象的某些字段的最佳方法?
- Java 9,Hibernate和java.sql / javax.transaction
- 如何解决“找不到方言类:org.hibernate.dialect.MYSQLDialect”的exception?