日期:2014-05-17  浏览次数:20695 次

关于HibernateException:Unable to read xml 以及Error applying BeanValidation relation
我们在使用MyEclipse 从DB Broswer 逆向生成Hibernate工程时,会出现Hibernate Exception,这其中有两个很常见其中一个是:Unable to Read XML,另一个是Error applying BeanValidation relational constraints.我们先说第一个吧:
Unable to Read XML这一个是因为无法读取.hbm.xml配置文件,也有说话是无法读取cfg.xml
不过在我的测试中这两者都有,其中原因主要有两个:
原因1:通过myeclipse逆向生成的POJO.hbm.xml的DTD头申明中有特殊符号(空格),这一点,网上有说法是工具生成的标签前后后特殊符号,建议删除.其实主要还是在
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.net/dtd/hibernate-mapping-3.0.dtd ">
这一句的最后
-3.0.dtd "
,dtd和"有个空格导致的dom4j解析错误.解决了这个问题后,还是出现Unable to Read XML,其实还是因为无法解析这份POJO.hbm.xml,这是因为DTD的引用地址有误,从网上找的答案来看,可以试着将上面的地址中的.net改为.org试下,应该就能成功.
如果出现Could not parse configuration: /hibernate.cfg.xml那应该就是cfg.xml有误,我在调试的时候引用
"http://hibernate.sourceforge.org/hibernate-configuration-3.0.dtd">
时候出现这个异常,但是改为
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
后正常


关于第二个异常Exception in thread "main" org.hibernate.HibernateException: Error applying BeanValidation relational constraints,解决方案请见sivyer123的日志:
http://blog.csdn.net/sivyer123/article/details/9185325

以下Unable to Read XML 异常控制台错误调试记录:
2013-12-31 13:23:47 org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
2013-12-31 13:23:47 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.1.4.Final}
2013-12-31 13:23:47 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
2013-12-31 13:23:47 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
2013-12-31 13:23:47 org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
2013-12-31 13:23:47 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
2013-12-31 13:23:47 org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
2013-12-31 13:23:47 org.hibernate.cfg.Configuration addResource
INFO: HHH000221: Reading mappings from resource: ./com/brady/model/Message.hbm.xml
Exception in thread "main" org.hibernate.InvalidMappingException: Unable to read XML
at org.hibernate.internal.util.xml.MappingReader.readMappingDocument(MappingReader.java:109)
at org.hibernate.cfg.Configuration.add(Configuration.java:478)
at org.hibernate.cfg.Configuration.add(Configuration.java:474)
at org.hibernate.cfg.Configuration.add(Configuration.java:647)