2015-10-18 68 views
0

阅读关于PluralSight的“Introduction to Hibernate”教程。我有这个异常错误。完整的错误是:线程“main”中的异常org.hibernate.MappingException:未知实体

Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.simpleprogrammer.User 
    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 com.simpleprogrammer.Program.main(Program.java:15) 

不知道什么是错的。我创建了User.java pojo。我创建了一个与pojo相匹配的表格。我创建了映射,然后将映射添加到hibernate.cfg.xml文件中。但是,仍然收到错误。任何人都可以帮助我通过这个?

的hibernate.cfg.xml

Program.java

public class Program { 
    public static void main(String[] args) { 
     System.out.println("Hello World!"); 
     Session session = HibernateUtilities.getSessionFactory().openSession(); 
     session.beginTransaction(); 

     User user = new User(); 
     user.setName("Joe"); 
     user.setGoal(250); 
     session.save(user); 

     session.getTransaction().commit(); 
     session.close(); 
     HibernateUtilities.getSessionFactory().close(); 
    } 
} 

User.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Oct 17, 2015 11:44:47 AM by Hibernate Tools 3.5.0.Final --> 
<hibernate-mapping> 
    <class name="com.simpleprogrammer.User" table="USERS"> 
     <id name="id" type="int"> 
      <column name="ID" /> 
      <generator class="identity" /> 
     </id> 
     <property name="name" type="java.lang.String"> 
      <column name="NAME" /> 
     </property> 
     <property name="total" type="int"> 
      <column name="TOTAL" /> 
     </property> 
     <property name="goal" type="int"> 
      <column name="GOAL" /> 
     </property> 
    </class> 
</hibernate-mapping> 

User.java

package com.simpleprogrammer; 

public class User { 
    private int id; 
    private String name; 
    private int total; 
    private int goal; 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getTotal() { 
     return total; 
    } 
    public void setTotal(int total) { 
     this.total = total; 
    } 
    public int getGoal() { 
     return goal; 
    } 
    public void setGoal(int goal) { 
     this.goal = goal; 
    } 
} 

HibernateUtilities.java

package com.simpleprogrammer; 

import org.hibernate.HibernateException; 
import org.hibernate.SessionFactory; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.service.ServiceRegistry; 

public class HibernateUtilities { 

    private static SessionFactory sessionFactory; 
    private static ServiceRegistry serviceRegistry; 

    static { 
     try { 
      Configuration configuration = new Configuration().configure(); 

      serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); 
      sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
     } 
     catch(HibernateException exception) { 
      System.out.println("Problem creating session factory!"); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 
+0

你已经在该位置的映射XML?也只是在cfg文件中添加'' – Saravana

+0

是的,我确信XML在那个位置。我还添加了一个映射标签只是为了资源 – LinhSaysHi

+0

我没有安装:(你能尝试的路径恩'/ COM/simpleprogrammer/User.hbm.xml' – Saravana

回答

0

我用你的榜样,并能够得到它有一些小的调整工作。

验证User.hbm.xml位于src/main/resources/com/simpleprogrammer中。改变在hibernate.cfg.xml为小写table="users"

然后:

  1. 除去从会话工厂name=""属性。
  2. 增加了<property name="hibernate.connection.password">SomePassword</property>
  3. 添加<property name="hibernate.hbm2ddl.auto">create</property>
1

请检查您在MySQL创建的架构名称和一个在hibernate.cfg file.It specied是不匹配对我来说,我是越来越相同的问题。

还修改如下所示的连接url,并从hibernate.cfg中删除默认模式字段。 jdbc:mysql:// localhost:3306/protein_tracker

这对我有用。

6

LinhSaysHi,我用Hibernate 5执行了你的代码,并且我有完全相同的错误。 我用Hibernate 4执行了它,没有问题。

上Pluralsight的教程已经对Hibernate 4. 这里创建一个会话工厂生成器,使用Hibernate的5部作品:

public class HibernateUtilities_5 { 

    private static final SessionFactory sessionFactory = buildSessionFactory(); 

    private static SessionFactory buildSessionFactory() { 
     try { 
      StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder() 
        .configure("hibernate.cfg.xml").build(); 
      Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder().build(); 
      return metadata.getSessionFactoryBuilder().build(); 

     } catch (HibernateException he) { 
      System.out.println("Session Factory creation failure"); 
      throw he; 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 
+0

?感谢科里你的解决方案像一个魅力工作。但我怎么能检查一样?我的意思是我怎么能降级我的冬眠版本4,检查像你。如果我知道这个过程中,我可以解决我的错误是由于如果你使用Maven你可以指定你在pom.xml想要的版本版本中future.Thanks问题提前.. – srinivas

+1

嘛。 – Coli

+0

Ok @ Coli.Thank u .. – srinivas

6

而与Hibernate 5.1.1试图出来我也面临着同样的错误。但是我解决了这个问题,将ServiceRegistry接口替换为StandardServiceRegistryBuilder,并使用“metadatasources”创建会话工厂。请看我的代码如下

static 
{ 
    try 
    { 
     //Configuration configuration = new Configuration().configure(); 
     standardServiceRegistry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml") 
            .build(); 
     Metadata metadata = new MetadataSources(standardServiceRegistry) 
           .getMetadataBuilder().build(); 
     sessionFactory = metadata.getSessionFactoryBuilder().build(); 

    }catch(HibernateException exception) 
    { 
     System.out.println("problem creating session factory!"); 
    } 
} 

public static SessionFactory getSessionFactory(){ 

    return sessionFactory; 
} 

我做了这些改变,它的工作就像一个魅力。 请在您的代码中对您加载配置文件的方式进行更改并重试。让我知道你是否仍然面临障碍。

+2

您的解决方案对我无效 – Valerii

0

更改代码,每休眠5

static 
    { 
     try { 
      //Configuration configuration = new Configuration().configure(); 
      serviceRegistry = new 
      StandardServiceRegistryBuilder().configure("hibernate.cfg.xml") 
             .build(); 
      Metadata metadata = new MetadataSources(serviceRegistry) 
           .getMetadataBuilder().build(); 
      sessionFactory = metadata.getSessionFactoryBuilder().build(); 
     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
    } 
    public static SessionFactory getSessionFactory() { 
    return sessionFactory; 
    } 

给 充分的类路径中user.hbm.xml

 <class name="com.simpleprogrammer.Users" table="USERS"> 

映射在hibernate.cfg.xml资源

 <mapping resource="com/simpleprogrammer/Users.hbm.xml"/> 

并执行下面的代码

Session session = HibernateUtilities.getSessionFactory().openSession(); 

    session.beginTransaction(); 

    Users user = new Users(); 

    user.setuserName("Prince"); 
    user.setGoal(100); 
    user.setId(101); 
    user.setTotal(10); 

    session.save(user); 

    session.getTransaction().commit(); 
    session.close(); 
    HibernateUtilities.getSessionFactory().close(); 
相关问题