2015-11-15 146 views
4

我收到此错误,我不知道我的hbm.xml文件出了什么问题。 我使用Eclipse Mars和Hibernate 5.0.2。org.hibernate.MappingException:未知实体:pack1.Persoana

错误:

Nov 15, 2015 11:49:19 PM org.hibernate.Version logVersion 
INFO: HHH000412: Hibernate Core {5.0.2.Final} 
Nov 15, 2015 11:49:19 PM org.hibernate.cfg.Environment <clinit> 
INFO: HHH000206: hibernate.properties not found 
Nov 15, 2015 11:49:19 PM org.hibernate.cfg.Environment buildBytecodeProvider 
INFO: HHH000021: Bytecode provider name : javassist 
Nov 15, 2015 11:49:19 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> 
INFO: HCANN000001: Hibernate Commons Annotations {5.0.0.Final} 
Nov 15, 2015 11:49:20 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 
WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
Nov 15, 2015 11:49:20 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] 
Nov 15, 2015 11:49:20 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH000046: Connection properties: {user=root, password=****} 
Nov 15, 2015 11:49:20 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH000006: Autocommit mode: false 
Nov 15, 2015 11:49:20 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 
INFO: HHH000115: Hibernate connection pool size: 20 (min=1) 
Nov 15, 2015 11:49:20 PM org.hibernate.dialect.Dialect <init> 
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 
org.hibernate.MappingException: Unknown entity: pack1.Persoana 
    at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776) 
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1451) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:100) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:678) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:670) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:665) 
    at pack1.Main.insert(Main.java:74) 
    at pack1.Main.main(Main.java:34) 
org.hibernate.MappingException: Unknown entity: pack1.Persoana 
    at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776) 
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1451) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:100) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:678) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:670) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:665) 
    at pack1.Main.insert(Main.java:74) 
    at pack1.Main.main(Main.java:35) 
org.hibernate.MappingException: Unknown entity: pack1.Persoana 
    at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776) 
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1451) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:100) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:678) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:670) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:665) 
    at pack1.Main.insert(Main.java:74) 
    at pack1.Main.main(Main.java:36) 
org.hibernate.UnknownEntityTypeException: Unable to locate persister: pack1.Persoana 
    at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:792) 
    at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2641) 
    at org.hibernate.internal.SessionImpl.access$2500(SessionImpl.java:164) 
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2579) 
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2566) 
    at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1044) 
    at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955) 
    at pack1.Main.update(Main.java:87) 
    at pack1.Main.main(Main.java:42) 
org.hibernate.UnknownEntityTypeException: Unable to locate persister: pack1.Persoana 
    at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:792) 
    at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2641) 
    at org.hibernate.internal.SessionImpl.access$2500(SessionImpl.java:164) 
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2579) 
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2566) 
    at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1044) 
    at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955) 
    at pack1.Main.delete(Main.java:105) 
    at pack1.Main.main(Main.java:43) 
Nov 15, 2015 11:49:21 PM org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService 
INFO: HHH000397: Using ASTQueryTranslatorFactory 
org.hibernate.hql.internal.ast.QuerySyntaxException: Persoana is not mapped [from Persoana] 
    at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:79) 
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:218) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76) 
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150) 
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:298) 
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) 
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1825) 
    at pack1.Main.afisare(Main.java:53) 
    at pack1.Main.main(Main.java:44) 
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Persoana is not mapped 
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:171) 
    at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91) 
    at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:76) 
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3678) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:564) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190) 
    ... 9 more 

主类:

package pack1; 
import java.util.List; 
import java.util.Date; 
import java.util.Iterator; 
import org.hibernate.HibernateException; 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.Transaction; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 

public class Main { 

    private static SessionFactory factory; 
    private static Configuration configuration; 

    private static ServiceRegistry serviceRegistry; 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     try{ 

      configuration = new Configuration().addResource("./hibernate.cfg.xml"); 
      configuration.configure(); 

      serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); 
      factory = configuration.buildSessionFactory(serviceRegistry); 

      //Configuration config = new Configuration(); 
      //factory = config.configure().buildSessionFactory(); 
      insert(5, "Maria", 20); 
      insert(6, "Ioana", 19); 
      insert(7, "Denisa", 14); 
     } 
     catch(Throwable ex){ 
      System.err.println("Failed to create sessionFactory object." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
     update(2,22); 
     delete(3); 
     afisare(); 

    } 

    private static void afisare(){ 
     Session session = factory.openSession(); 
     Transaction tx = null; 
     try{ 
      tx = session.beginTransaction(); 
      Query query= session.createQuery("from Persoana");//Hibernate Query Language (HQL) 
      //se poate rula SQL cu createSQLQuery(…) 
      List<Persoana> persoane = query.list(); 
      for (Persoana p: persoane){ 
       System.out.println(p); 
      } 
      tx.commit(); 
     }catch (HibernateException e) { 
      if (tx!=null) tx.rollback(); 
      e.printStackTrace(); 
     }finally { 
      session.close(); 
     } 
    } 

    private static void insert(int id, String nume, int varsta){ 
     Session session = factory.openSession(); 
     Transaction tx = null; 
     try{ 
      tx = session.beginTransaction(); 
      Persoana pers= new Persoana(id, nume, varsta); 
      session.save(pers); 
      tx.commit(); 
     }catch (HibernateException e) { 
      if (tx!=null) tx.rollback(); 
      e.printStackTrace(); 
     }finally { session.close(); } 
    } 

    private static void update(Integer id, int varsta){ 
     Session session = factory.openSession(); 
     Transaction tx = null; 
     try{ 
      tx = session.beginTransaction(); 
      Persoana pers= (Persoana)session.get(Persoana.class, id); 
      pers.setVarsta(varsta); 
      session.update(pers); 
      tx.commit(); 
     }catch (HibernateException e) { 
      if (tx!=null) 
       tx.rollback(); 
      e.printStackTrace(); 
     }finally { 
      session.close(); 
     } 
    } 

    private static void delete(Integer id){ 
     Session session = factory.openSession(); 
     Transaction tx = null; 
     try{ 
      tx = session.beginTransaction(); 
      Persoana pers= (Persoana)session.get(Persoana.class, id); 
      session.delete(pers); 
      tx.commit(); 
     }catch (HibernateException e) { 
      if (tx!=null) tx.rollback(); 
      e.printStackTrace(); 
     }finally { 
      session.close(); 
     } 
    } 

} 

这是其他类:

package pack1; 

public class Persoana { 

    private int id; 
    private String nume; 
    private int varsta; 
    public Persoana(){} 
    public Persoana(int id,String nume,int varsta){ 
     this.id=id; 
     this.nume=nume; 
     this.varsta=varsta; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getNume() { 
     return nume; 
    } 
    public void setNume(String nume) { 
     this.nume = nume; 
    } 
    public int getVarsta() { 
     return varsta; 
    } 
    public void setVarsta(int varsta) { 
     this.varsta = varsta; 
    } 
    @Override 
    public String toString() { 
     return id + ", " + nume + ", " + varsta; 
    } 

} 

这是我的hibernate.cfg.xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/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/test</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password">rootpass</property> 
     <mapping class="Persoana" resource="Persoana.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

这里是我的hbm.xml文件

<!-- Generated Nov 15, 2015 2:03:44 PM by Hibernate Tools 3.5.0.Final --> 
<hibernate-mapping> 
    <class name="pack1.Persoana" table="PERSOANA"> 
     <id name="id" type="int"> 
      <column name="ID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="nume" type="java.lang.String"> 
      <column name="NUME" /> 
     </property> 
     <property name="varsta" type="int"> 
      <column name="VARSTA" /> 
     </property> 
    </class> 
</hibernate-mapping> 
+0

'',class属性对我来说好像不对, –

+3

我需要说的是,这个问题问得不好。你应该尽可能地尽量少地构成一些问题,而不是倾出大量不相关的信息 –

回答

2

尽量把包名称为hibernate-mapping:从mapping在cfg.xml中

<hibernate-mapping package="pack1"> 
    <class name="Persoana" table="PERSOANA"> 

和删除类定义(class="Persoana")。

2

使用<mapping resource="Persoana.hbm.xml" />在hibernate.cfg.xml应该足够

2

解决了! 我发现的问题与Hibernate的版本有关。我已经转换到休眠4.3.6最终,它工作正常!所以,不要使用Hibernate版本5.0.2!

相关问题