org.hibernate.HibernateException:无法解析配置:hibernate.cfg.xml

时间:2020-02-23 14:44:23  来源:igfitidea点击:

如果您正在寻找针对org.hibernate.HibernateException的解决方案:无法解析配置:hibernate.cfg.xml,那么您来对地方了。
最近我正在开发一个Hibernate项目,最新版本为4.3.5.Final,一切进展顺利。
突然我失去了一段时间的互联网连接,该项目停止工作,并引发异常。

Initial SessionFactory creation failed.org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2163)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:2075)
	at com.theitroad.hibernate.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
	at com.theitroad.hibernate.util.HibernateUtil.getSessionFactory(HibernateUtil.java:34)
	at com.theitroad.hibernate.main.HQLExamples.main(HQLExamples.java:20)
Caused by: org.dom4j.DocumentException: hibernate.org Nested exception: hibernate.org
	at org.dom4j.io.SAXReader.read(SAXReader.java:484)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2155)
	... 4 more
Exception in thread "main" java.lang.ExceptionInInitializerError
	at com.theitroad.hibernate.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:29)
	at com.theitroad.hibernate.util.HibernateUtil.getSessionFactory(HibernateUtil.java:34)
	at com.theitroad.hibernate.main.HQLExamples.main(HQLExamples.java:20)
Caused by: org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2163)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:2075)
	at com.theitroad.hibernate.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
	... 2 more
Caused by: org.dom4j.DocumentException: hibernate.org Nested exception: hibernate.org
	at org.dom4j.io.SAXReader.read(SAXReader.java:484)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2155)
	... 4 more

org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml

从上面的异常堆栈跟踪来看,Hibernate似乎正在尝试加载DTD文件以验证hibernate.cfg.xml文件,但由于没有互联网连接,它失败了。

我使用Hibernate Tools生成我的hibernate配置和映射文件。

我的hibernate.cfg.xml文件具有以下DTD DocType定义。

<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"https://hibernate.org/dtd/hibernate-configuration-3.0.dtd">

理想情况下,这应该不是问题,因为休眠罐子中存在DTD文件,并且应该从那里加载它。
但这没有发生。
花了一些时间寻求在线帮助后,我能够找到两种方法来解决此问题。

  • 休眠配置文件位置第一个解决方案是使用类路径在系统中提供DTD文件位置。
    因此,可以脱机工作的DocType将是;
  • 将SourceForge DTD URL与SYSTEM一起使用另一种解决方案是我将DTD URL更改为SourceForge并将声明从PUBLIC更改为SYSTEM,因此如果您的系统离线,下面的方法也可以使用。

这似乎很奇怪,因为理想情况下它应该适用于hibernate.org的DTD URL,因为Hibernate 4始终会发出以下警告。