2015-11-15 142 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!

相關問題