在实际的开发中有时因为想要使用某个版本的插件,但是这个插件使用的Hibernate的版本与现在你所使用的版本不一致,那么这时候就很有必要知道配置文件中xml的头部信息需要替换为相应版本的头,否则的话会出现错误。
我在开发时,切换了下Hibernate的版本,切到低版本去(首先的任务是换jar包),但是发现切换完成总是报错,看代码一遍又一遍也找不出错误,最后发现错误信息中显示无法初始化类的实例,我当时猜测可能是相应的bean类的映射文件的xml头不是当前版本的,后来把对应的xml的头改了一下,最终成功。
头部信息表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。
下面整理了几个经常用的版本的xml文件的头部信息:
1 Hibernate 3.6.0 的XML的头
<!-- hibernate.cfg.xml文件 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- hbm.xml文件 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- hbm.xml文件中也可以使用这个 -->
<!doctype hibernate-mapping public
"-//hibernate/hibernate mapping dtd 3.0//en"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
2 Hibernate 3.3.1 的XML的头
<!-- hibernate.cfg.xml文件 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- hbm.xml文件 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
头不能写错,否则会抛如下异常:
Caused by: org.hibernate.HibernateException: Could not parse configuration: file:/E:/workspace/ItcastOA/WebRoot/WEB-INF/classes/hibernate.cfg.xml
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1528)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1477)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:601)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
... 48 more
Caused by: org.dom4j.DocumentException: www.hibernate.org Nested exception: www.hibernate.org
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1518)
... 53 more