与Hibernate交互时出错

时间:2012-01-31 22:18:18

标签: hibernate

对于你所有的信息我正在开发一个使用Eclipse通过使用hibernate与数据库交互的java项目。所以我用ojdbc14.jar和hibernate3.jar更新了BUILD PATH,并且所有7个jar文件都存在于Hibernate的必需文件夹中。

我在这里粘贴了所有课程。 在运行主Manager.java时,我收到错误“线程中的异常”主“org.hibernate.InvalidMappingException:无法解析来自资源com / lara / Person.hbm.xml的映射文档”。有人可以告诉我哪里犯了错误。

错误记录

Exception in thread "main" org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/lara/Person.hbm.xml
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:616)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1635)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1603)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1582)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1556)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1476)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
    at com.lara.Manager.main(Manager.java:16)
Caused by: org.hibernate.MappingException: class org.hibernate.tutorial.domain.Person not found while looking for property: id
    at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:232)
    at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:302)
    at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:423)
    at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:356)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:295)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:166)
    at org.hibernate.cfg.Configuration.add(Configuration.java:716)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:551)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:613)
    ... 7 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.tutorial.domain.Person
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:192)
    at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:228)
    ... 15 more









 **hibernate.cfg** 
       <?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>

        <!-- Database connection settings -->
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
        <property name="connection.username">System</property>
        <property name="connection.password">java</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">2</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.OracleDialect</property>

        <!-- Enable Hibernate's current session context -->
        <property name="current_session_context_class">org.hibernate.context.ManagedSessionContext</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>

        <mapping resource="com/lara/Person.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

Person.bhm.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">

<hibernate-mapping package="org.hibernate.tutorial.domain">

    <class name="Person" table="PERSON">
        <id name="id" column="PERSON_ID">
            <generator class="native"/>
        </id>
        <property name="age"/>
        <property name="firstname"/>
        <property name="lastname"/>

    </class>

</hibernate-mapping>

pojo类或持久性类

package com.lara;

public class Person 
{
    private int id;
    private String firstname;
    private String lastname;
    private int age;
    public int getId() 
    {
        return id;
    }
    public void setId(int id) 
    {
        this.id = id;
    }
    public String getFirstname() 
    {
        return firstname;
    }
    public void setFirstname(String firstname) 
    {
        this.firstname = firstname;
    }
    public String getLastname()
    {
        return lastname;
    }
    public void setLastname(String lastname) 
    {
        this.lastname = lastname;
    }
    public int getAge() 
    {
        return age;
    }
    public void setAge(int age) 
    {
        this.age = age;
    }

}

* Manager.java(我们使用Hibernate框架的主类)*

    package com.lara;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Manager
{
    public static void main(String[] args)
    {
        Person p1 = new Person();
        p1.setFirstname("saurabh");
        p1.setLastname("rai");
        p1.setAge(25);
        Configuration c1 = new Configuration();
        c1.configure();
        SessionFactory sf = c1.buildSessionFactory();
        Session s1 = sf.openSession();
        s1.beginTransaction();
        s1.save(p1);
        s1.getTransaction().commit();
        s1.flush();
        s1.close();
        System.out.println("done");
    }
}

2 个答案:

答案 0 :(得分:2)

<hibernate-mapping package="org.hibernate.tutorial.domain">com.lara。你认为这两者有什么关系?您的映射文件包含错误的包声明,而Hibernate无法找到类org.hibernate.tutorial.domain.Person

答案 1 :(得分:1)

尝试在hbm.xml文件中更改hibernate-mapping中的包,使其与Person对象的包匹配。你有org.hibernate.tutorial.domain与com.lara的对比