2012-08-17 97 views
1
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:15) 
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from invalid mapping 
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:549) 
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:613) 
    ... 7 more 
Caused by: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 39; Document root element "hibernate-mapping", must match DOCTYPE root "hibernate-configuration". 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) 
    at org.dom4j.io.SAXReader.read(SAXReader.java:465) 
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:546) 
    ... 8 more 

的hibernate.cfg.xml

 <?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">system</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.hbm.xml 
============== 
     <?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-mapping package="com.lara"> 

    <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> 


Person.java 
============= 
     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 
============= 
     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("abc"); 
     p1.setLastName("xyz"); 
     p1.setAge(22); 

     Configuration c1 = new Configuration().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"); 
    } 
     } 

回答

5

错误消息称(埋在一个大筹码跟踪):

Document root element "hibernate-mapping", must match DOCTYPE root "hibernate-configuration" 

这是因为你的Person.hbm.xml文件,必须

<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

,你应该可能有

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

这DOCTYPE有根标签相匹配。

+0

thankx,问题就解决了 – sai576 2012-08-18 15:21:57

+0

真棒......:d – LPD 2013-05-09 12:34:51

0

InvalidmappingException出现在一定条件下请来仔细阅读

  1. 我们将使用 ,而不是我们用那么这个例外发生一定的ID标签。

  2. 在POJO类声明的数据成员像数据库ü申报“名” OK,然后 在映射文件你所写的只是简单的术语,我们可以说, 像什么ü在ID标签的name属性值声明“名”其对应的pojo类中没有 数据成员,则只会出现一个错误InvalidMappingException。当orthis列名不完全匹配到相应的数据库提交出现

  3. SQLGrammarException。

3

很简单

1.创建构造

public Person(){} 

这种处于休眠最主要的。它将通过此​​构造函数映射对象(使用Java Reflection Concept)

2.理解dtd。 有两种类型的DTD可用映射DTD和配置DTD的

映射-DTD是

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

配置DTD是

<?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.cfg.xml是配置文件和Person.hbm .xml映射文件 所以更改Person.hbm.xml中的dtd

它将运行。

0

我也收到了这个错误信息。但在我的情况下,班级名称是错误的。根据下面的示例添加正确的包和类名称。

<class name="com.project.Question" table="question"> 
相关问题