ошибка при взаимодействии с Hibernate - PullRequest
1 голос
/ 01 февраля 2012

Для вас вся информация: я разрабатываю один Java-проект с использованием Eclipse для взаимодействия с базой данных с помощью hibernate. Поэтому я обновил BUILD PATH с помощью ojdbc14.jar и hibernate3.jar и всех 7 jar-файлов, присутствующих в требуемой папке Hibernate.

Я вставил все классы здесь. При запуске main Manager.java я получаю сообщение об ошибке " Исключение в потоке" main "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 Framework) *

    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 ]

2 голосов
/ 01 февраля 2012

<hibernate-mapping package="org.hibernate.tutorial.domain"> и com.lara.Как вы думаете, как они оба связаны?Ваш файл сопоставления имеет неправильное объявление пакета, и Hibernate не может найти класс org.hibernate.tutorial.domain.Person

1 голос
/ 01 февраля 2012

Попробуйте изменить пакет в вашем hibernate-mapping в файле hbm.xml, чтобы он соответствовал пакету вашего объекта Person. У вас есть org.hibernate.tutorial.domain против com.lara

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...