2015-04-18 133 views
3

我是一名新手休眠配置。在我的Eclipse项目中,我得到了上面的休眠错误。属性“列”/“类型”必须为元素类型“属性”声明

ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (2) : Element type "hibernate-mapping" must be declared. 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (3) : Element type "class" must be declared. 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (4) : Element type "id" must be declared. 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (5) : Element type "generator" must be declared. 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (7) : Attribute "column" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (7) : Attribute "type" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (8) : Attribute "column" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (8) : Attribute "type" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (9) : Attribute "column" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (9) : Attribute "type" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (10) : Attribute "column" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (10) : Attribute "type" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (2) : Element type "hibernate-mapping" must be declared. 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (3) : Element type "class" must be declared. 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (4) : Element type "id" must be declared. 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (5) : Element type "generator" must be declared. 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (7) : Attribute "column" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (7) : Attribute "type" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (8) : Attribute "column" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (8) : Attribute "type" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (9) : Attribute "column" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (9) : Attribute "type" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (10) : Attribute "column" must be declared for element type "property". 
ERROR: org.hibernate.internal.util.xml.ErrorLogger - HHH000196: Error parsing XML (10) : Attribute "type" must be declared for element type "property". 
Exception in thread "main" org.hibernate.InvalidMappingException: Unable to read XML 
    at org.hibernate.internal.util.xml.MappingReader.legacyReadMappingDocument(MappingReader.java:375) 
    at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:304) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:516) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:512) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:686) 
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:769) 
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2255) 
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2227) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2207) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2160) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2075) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2054) 
    at com.test.Main.main(Main.java:41) 
Caused by: org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 20; Element type "hibernate-mapping" must be declared. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1906) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:742) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:605) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3138) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:880) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649) 
    at org.dom4j.io.SAXReader.read(SAXReader.java:465) 
    at org.hibernate.internal.util.xml.MappingReader.legacyReadMappingDocument(MappingReader.java:325) 
    ... 12 more 

在PERSONDB类中,有五列命名为PERSON_ID,PERSON_FIRSTNAME,PERSON_LASTNAME,PERSON_GENDER,PERSON_AGE。

域classes.hbm.xml:

<?xml version="1.0" encoding="utf-8"?> 
 
<!DOCTYPE hibernate-mapping 
 
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
 

 
<hibernate-mapping> 
 
\t <class table="Person" lazy="false" name="com.hibernate.data.Person" > 
 
\t \t <id column="PERSON_ID" type="int" name="id" > 
 
\t \t \t <generator class="increment"/> 
 
\t \t </id> 
 
\t \t \t <property column="PERSON_FIRSTNAME" type="string" name="firstName"/> 
 
\t \t \t <property column="PERSON_LASTNAME" type="string" name="lastName"/> 
 
\t \t \t <property column="PERSON_GENDER" type="string" name="gender"/> 
 
\t \t \t <property column="PERSON_AGE" type="integer" name="age" /> 
 
\t </class> 
 
</hibernate-mapping>

hibernate.cfg.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
 
<!DOCTYPE hibernate-configuration PUBLIC 
 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
 
     
 
<hibernate-configuration> 
 
\t 
 
\t <session-factory> 
 
\t <!-- Database connection settings --> 
 
\t <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
 
\t <property name="connection.url">jdbc:mysql://localhost:3306/PERSONDB</property> 
 
\t <property name='connection.username'>root</property> 
 
    <property name='connection.password'>root</property> 
 
    
 
\t <!-- SQL dialect --> 
 
\t <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
 
\t <!-- Specify session context --> 
 
\t <property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property> 
 
\t <!-- Show SQL --> 
 
\t <property name="show_sql">true</property> 
 
\t <!-- Referring Mapping File --> 
 
\t <mapping resource="domain-classes.hbm.xml"/> 
 
\t <mapping class="src/main/java/com.hibernate.data/Person"/> 
 
\t </session-factory> 
 

 
</hibernate-configuration>

Person.java:

package com.hibernate.data; 

public class Person { 
private int id; 
private String firstName; 
private String lastName; 
private String gender; 
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 String getGender() { 
    return gender; 
} 
public void setGender(String gender) { 
    this.gender = gender; 
} 
public int getAge() { 
    return age; 
} 
public void setAge(int age) { 
    this.age = age; 
} 
} 

我该如何解决这个问题?

+0

请问您可以发布您的'com.hibernate.data.Person'类,并提供PERSONDB中对应表的内容描述? – jhenderson2099

回答

5

我改变

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-mapping 
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

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

现在,它的工作原理。

+0

是的。您的DOCTYPE DTD指向错误的版本。恭喜你弄明白了! – jhenderson2099

相关问题