属性"列" /"类型"必须声明元素类型" property"

时间:2015-04-18 16:30:21

标签: java hibernate

我是hibernate配置的新手。在我的Eclipse项目中,我收到了上面的hibernate错误。

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>
	<class table="Person" lazy="false" name="com.hibernate.data.Person" >
		<id column="PERSON_ID" type="int" name="id"  >
			<generator class="increment"/>
		</id>
			<property column="PERSON_FIRSTNAME" type="string" name="firstName"/>
			<property column="PERSON_LASTNAME" type="string" name="lastName"/>
			<property column="PERSON_GENDER" type="string" name="gender"/>
			<property column="PERSON_AGE" type="integer" name="age" />
	</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>
	
	<session-factory>
	<!-- Database connection settings -->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="connection.url">jdbc:mysql://localhost:3306/PERSONDB</property>
	<property name='connection.username'>root</property>
    <property name='connection.password'>root</property>
    
	<!-- SQL dialect -->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	<!-- Specify session context -->
	<property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property>
	<!-- Show SQL -->
	<property name="show_sql">true</property>
	<!-- Referring Mapping File -->
	<mapping resource="domain-classes.hbm.xml"/>
	<mapping class="src/main/java/com.hibernate.data/Person"/>
	</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;
}
}

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

我改变了

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

现在,它有效。

答案 1 :(得分:0)

我在以下声明中面临一些问题

<?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 5,我必须将其更改为以下内容才能正常工作。

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

答案 2 :(得分:0)

查看您的代码

  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   

将此更改为:

  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">