Hibernate 未联网情况下不能根据dtd解析hbm.xml

来源:互联网 发布:ppt图表无法修改数据 编辑:程序博客网 时间:2024/06/05 04:42
通常在使用log4j或者hibernate工具时都要写xml配置文件,基本上每一个xml配置文件都有规范,也就是dtd文件,因为在项目运行读取xml配置文件时就是先读取dtd文件来判断xml文件是否正确,验证正确之后才会真的读取xml文件。
之前在使用hibernate时遇到一个问题,在不联网的情况下项目启动不成功。当时网上十点多还是可以正常运行的,11点后就不行(学校11点后断网,真坑),看报错信息是因为无法解析hbm.xml文件,仔细看hbm.xml文件路径没错,愣是无法解析,甚是诡异,后来就开始怀疑dtd文件的问题。一开始想到就是把dtd文件放到本地,让其本地解析。经过以下博客的学习:
http://www.cnblogs.com/xiaoluo501395377/archive/2012/11/06/2756204.html
大多数情况下是可以解决的。(网上还有方法说是跳过dtd文件验证,建议不要这样做)

按照以上的博客,把dtd文件放到项目里后,xml文件改写为:


<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping SYSTEM  "hibernate-mapping-3.0.dtd">

而我的问题仍是无法解决,提示我dtd文件不存在,于是试着改变dtd文件的位置,尝试过把文件放到项目路径下,WebContent下,WEB-INF下,src下都不行。仔细看报错信息,居然提示我


 找不到 D:\EclipseJavaEE\eclipse\hibernate-configuration-3.0.dtd

居然到我Eclipse下的目录里找dtd文件了,一脸懵逼,最后迫于无奈只好把dtd文件放到Eclipse下了,当然这只是没联网的情况下,毕竟网断了,但代码还是要继续...


2017-04-30更新:

通过修改修改利用本地dtd文件检验是可以的,不成功的原因是因为hibernate3.x版本官方文档错误,在hbm.xml配置文件上引用的dtd文件错误的写成了

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


实则应该是

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

我也是醉了...知道是tdt路径不正确导致的原因后,就可以利用上面提到的方法来设为本地验证。(之前不正确的原因是因为按照第一个dtd路径下载的dtd文件,保存本地后验证还是错的!)下面来简单说明本地验证的过程。

1.window -> preferences ,搜索xml,选择 XML Catalog,选中User Specified Entries,最后点击Add。


2.添加本地tdt文件路径


需要注意的地方:

1.Key type选择public ID

2.Key 为:-//Hibernate/Hibernate Mapping DTD 3.0//EN

3.勾选Alternative web address,在下填写:http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd

其实为什么这样填写,可以从hbm.xml文件中揣摩出来


最后重启Eclipse即可。

0 0