2013-03-06 96 views
0

嗨,冬眠抛出MappingException

我试图做与Hibernate和Maven一个简单的应用程序。
我已经创建了hibernate.cfg.xml和映射文件contacts.hbm.xml。

一旦我开始它,我得到一个异常:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "main" org.hibernate.MappingException: invalid configuration 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2241) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2158) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2137) 
    at main.java.FirstHibernate.com.myhib.CRUDS.CrudsOps.main(CrudsOps.java:15) 
Caused by: org.xml.sax.SAXParseException; lineNumber: 54; columnNumber: 129; Attribute "value" must be declared for element type "property". 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) 
    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.addDTDDefaultAttrsAndValidate(XMLDTDValidator.java:1253) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1917) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(XMLDTDValidator.java:763) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:353) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2715) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
    at org.dom4j.io.SAXReader.read(SAXReader.java:465) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2238) 
    ... 3 more 

这里是我的hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?> 
<!-- 
    ~ Hibernate, Relational Persistence for Idiomatic Java 
    ~ 
    ~ Copyright (c) 2010, Red Hat Inc. or third-party contributors as 
    ~ indicated by the @author tags or express copyright attribution 
    ~ statements applied by the authors. All third-party contributions are 
    ~ distributed under license by Red Hat Inc. 
    ~ 
    ~ This copyrighted material is made available to anyone wishing to use, modify, 
    ~ copy, or redistribute it subject to the terms and conditions of the GNU 
    ~ Lesser General Public License, as published by the Free Software Foundation. 
    ~ 
    ~ This program is distributed in the hope that it will be useful, 
    ~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
    ~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 
    ~ for more details. 
    ~ 
    ~ You should have received a copy of the GNU Lesser General Public License 
    ~ along with this distribution; if not, write to: 
    ~ Free Software Foundation, Inc. 
    ~ 51 Franklin Street, Fifth Floor 
    ~ Boston, MA 02110-1301 USA 
    --> 
<!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="connection.driver_class">org.postgresql.Driver</property> 
     <property name="connection.url">jdbc:postgresql://localhost:5432/hibernatedb</property> 
     <property name="connection.username">postgres</property> 
     <property name="connection.password">postgres</property> 

     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">1</property> 

     <!-- SQL dialect --> 
     <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> 

     <!-- Disable the second-level cache --> 
     <property name="cache.provider_class">org.hibernate.cache.internal.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> 

     <property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider" /> 

     <property name="propertyName">value</property> 

     <!-- Names the annotated entity class --> 
     <mapping resources="resources/hibernate/mapping/contacts.hbm.xml"/> 
     <mapping class="FirstHibernate.com.myhib.CRUDS.Contacts"/> 

    </session-factory> 

</hibernate-configuration> 

contacts.hbm.xml

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD//EN" 
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-mapping> 
    <class table="contacts" lazy="false" name="FirstHibernate.com.myhib.CRUDS.Contacts"> 
     <id column="id" type="int" name="id"> 
      <generator class="increment" /> 
     </id> 
     <propetry name="fname" type="string" column="fname" /> 
     <propetry name="lname" type="string" column="lname" /> 
    </class> 

</hibernate-mapping> 

什么可以是该异常的来源?

P.S.如果需要的话,可以发布Java类。

--UPDATE--

当我改变

<property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider"/> 

<property name="hibernate.connection.provider_class">org.hibernate.connection.DriverManagerConnectionProvider</property> 

我得到了这样的异常

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "main" org.hibernate.MappingException: invalid configuration 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2241) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2158) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2137) 
    at main.java.FirstHibernate.com.myhib.CRUDS.CrudsOps.main(CrudsOps.java:15) 
Caused by: org.xml.sax.SAXParseException; lineNumber: 59; columnNumber: 76; Attribute "resources" must be declared for element type "mapping". 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) 
    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.addDTDDefaultAttrsAndValidate(XMLDTDValidator.java:1253) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1917) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.emptyElement(XMLDTDValidator.java:763) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:353) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2715) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
    at org.dom4j.io.SAXReader.read(SAXReader.java:465) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2238) 
    ... 3 more 

--update 2--

有一次,我改变了

你确定它不?因为在DTD中,我只能看到元素“映射”的“资源”属性而不是“资源”属性。 - 巴拉兹玛丽亚内梅特5分钟前

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "main" org.hibernate.InvalidMappingException: Unable to read XML 
    at org.hibernate.util.xml.MappingReader.readMappingDocument(MappingReader.java:101) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:513) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:509) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:716) 
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:801) 
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2344) 
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2310) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2290) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2243) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2158) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2137) 
    at main.java.FirstHibernate.com.myhib.CRUDS.CrudsOps.main(CrudsOps.java:15) 
Caused by: org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 20; Document root element "hibernate-mapping", must match DOCTYPE root "hibernate-configuration". 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) 
    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.rootElementSpecified(XMLDTDValidator.java:1599) 
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1877) 
    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:376) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3063) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:881) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
    at org.dom4j.io.SAXReader.read(SAXReader.java:465) 
    at org.hibernate.util.xml.MappingReader.readMappingDocument(MappingReader.java:75) 
    ... 11 more 

--update 3--

,帮助我

And finally it looks like there's a problem with contacts.hbm.xml. Change 

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

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

现在,我得到这样的例外:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "main" org.hibernate.InvalidMappingException: Unable to read XML 
    at org.hibernate.util.xml.MappingReader.readMappingDocument(MappingReader.java:101) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:513) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:509) 
    at org.hibernate.cfg.Configuration.add(Configuration.java:716) 
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:801) 
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2344) 
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2310) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2290) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2243) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2158) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2137) 
    at main.java.FirstHibernate.com.myhib.CRUDS.CrudsOps.main(CrudsOps.java:15) 
Caused by: org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 63; Element type "propetry" must be declared. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) 
    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.emptyElement(XMLDTDValidator.java:763) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:353) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2715) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
    at org.dom4j.io.SAXReader.read(SAXReader.java:465) 
    at org.hibernate.util.xml.MappingReader.readMappingDocument(MappingReader.java:75) 
    ... 11 more 

+0

的这段文字这是一个错字:propetry!更改为属性:)尝试了解异常所说的内容:“元素类型”propetry“必须声明”。这意味着没有“propetry”这样的属性。那么你将不得不看它,你会看到错字! – 2013-03-06 10:44:06

+0

哦!是的,那个固定的错误。 – devger 2013-03-06 10:51:45

回答

0

看一看的DTD。 元素property没有属性value。 在类似的情况下,当您遇到XML解析错误时,请始终查看DTD或模式描述!

所以当PSR也表示,改变

<property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider"/> 

和移动value为子元素:

<property name="hibernate.connection.provider_class">org.hibernate.connection.DriverManagerConnectionProvider</property> 

而且它<mapping resources=""...>,而不是<mapping resource=""...>。在DTD中,我只能看到元素mappingresource而不是resources属性。

最后它看起来像contacts.hbm.xml有问题。更改

<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD//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"> 
+0

是的,这也解决了我的问题,现在我得到了另一个异常,更新帖子。 – devger 2013-03-06 10:36:50

+0

如果解决了您的问题,请接受答案,并发布一个新问题,如果它是不同的问题! – 2013-03-06 10:38:30

0

我认为这是不正确的

<property name="hibernate.connection.provider_class" value="org.hibernate.connection.DriverManagerConnectionProvider" /> 

变化

<property name="hibernate.connection.provider_class"> org.hibernate.connection.DriverManagerConnectionProvider</property > 

它不具有 “值” 属性

+0

不幸的是,这并没有帮助。 – devger 2013-03-06 10:09:57

+0

r再次发生异常 – PSR 2013-03-06 10:10:50

+0

什么是这行: value? – 2013-03-06 10:11:13

0

在上面添加的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">