与Hibernate交互时出错
为了向大家提供所有信息,我正在使用Eclipse开发一个java项目,以便通过使用hibernate与数据库交互。因此,我使用ojdbc14.jar和hibernate3.jar以及hibernate所需文件夹中的所有7个jar文件更新了构建路径 我把所有的课都贴在这里了。 在运行main Manager.java时,我收到一个错误“线程“main”org.hibernate.InvalidMappingException:无法解析来自资源com/lara/Person.hbm.xml的映射文档”。谁能告诉我哪里出错了 错误日志与Hibernate交互时出错,hibernate,Hibernate,为了向大家提供所有信息,我正在使用Eclipse开发一个java项目,以便通过使用hibernate与数据库交互。因此,我使用ojdbc14.jar和hibernate3.jar以及hibernate所需文件夹中的所有7个jar文件更新了构建路径 我把所有的课都贴在这里了。 在运行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>
*java(我们使用Hibernate框架的主类)*
和com.lara
。你认为这两者有什么关系?您的映射文件包含错误的包声明,并且Hibernate无法找到类org.Hibernate.tutorial.domain.Person
请尝试在hbm.xml文件中更改Hibernate映射中的包,使其与Person对象的包相匹配。你有org.hibernate.tutorial.domain vs.com.lara@skaffman我只是忘了提到这个错误,因为我还处于紧张状态。还有更多的错误。@skaffman现在我已经粘贴了整个错误日志,以前我面临的问题是异常告诉您出了什么问题。你读过它吗?它之所以被称为堆栈跟踪而不是跟踪字符串是有原因的。当堆栈跟踪本身说它找不到类org.hibernate.tutorial.domain.Person
时,为什么还要问这个问题呢?当我修改映射到inside Person.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">
<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>
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;
}
}
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");
}
}