休眠:无法解析配置:hibernate.cfg.xml?
Hibernate: Could not parse configuration: hibernate.cfg.xml?
在我的应用程序中尝试使用 Hibernate
时出现以下错误:
org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
这是什么原因造成的?请参阅下面的 hibernate.cfg.xml
、 output
和 Runner class
?
注意:我查看了 this answer 并尝试使用建议修复它,但没有成功。
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">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test-db</property>
<property name="connection.username">user</property>
<property name="connection.password">password</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Use XML-based mapping metadata -->
<!-- <mapping resource="domain/Message.hbm.xml"/> -->
<!-- Use Annotation-based mapping metadata -->
<mapping class="entity.Message"/>
</session-factory>
</hibernate-configuration>
输出:
Successfully started process 'command 'C:\Program Files\Java\jdk1.8.0_65\bin\java.exe''
Dec 16, 2015 12:01:20 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
Dec 16, 2015 12:01:20 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.5.Final}
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: hibernate.cfg.xml
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: hibernate.cfg.xml
Initial SessionFactory creation failed.org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
at util.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)
at util.HibernateUtil.<clinit>(HibernateUtil.java:12)
at client.HelloWorldClient.main(HelloWorldClient.java:13)
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 util.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
... 2 more
Caused by: org.dom4j.DocumentException: Error on line 2 of document : The processing instruction target matching "[xX][mM][lL]" is not allowed. Nested exception: The processing instruction target matching "[xX][mM][lL]" is not allowed.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2155)
... 4 more
:run FAILED
:run (Thread[Daemon worker Thread 15,5,main]) completed. Took 0.617 secs.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':run'.
> Process 'command 'C:\Program Files\Java\jdk1.8.0_65\bin\java.exe'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
亚军Class:
package client;
import org.hibernate.Session;
import util.HibernateUtil;
import entity.Message;
public class HelloWorldClient {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Message message = new Message( "Hello World with Hibernate & JPA Annotations" );
session.save(message);
session.getTransaction().commit();
session.close();
}
}
编辑:将鼠标悬停在会话工厂标签上时出现错误:
为了被解析为 xml,您的 hibernate.cfg.xml 应该以:
开头
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
检查 hibernate.cfg.xml 中的以下内容:
- 检查
<?xml ?>
前是否有空白space或其他内容
- 检查 hibernate.cfg.xml
中是否有另一个 <?xml ?>
定义
- 检查
<?xml ?>
(http://www.w3.org/International/questions/qa-byte-order-mark#remove) 之前是否有字节顺序标记 (BOM)
配置文件的第二行有问题。尝试如下更改 DTD 文件的位置。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
希望对您有所帮助。
能否请您尝试以下配置细节,并确保您已将 hibernate.cfg.xml 文件放在 SRC 目录下。如果非要放置src以外的cfg文件,必须在创建SessionFactory时在Configuration()中指定路径。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property>
<property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/hibernatex </property>
<property name="hibernate.connection.username"> root </property>
<property name="hibernate.connection.password"> root </property>
<property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property>
<mapping resource="com/ora/hibernate/examples/Employee.hbm.xml"
package="com.ora.hibernate.examples" />
</session-factory>
</hibernate-configuration>
我能够解决问题所在。问题是我的 hibernate.cfg.xml
文件不在我项目中的 "resources" 目录下。
这解决了我遇到的所有问题,而且我不需要更改文件中的代码。
这是因为您的 Internet 阻止从该 DTD 获取数据。
只需下载 xml 文件中提到的所有 DTD,并在所有 xml 文件中给出这样的位置。
这对我有用
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "C:\Downloads\hibernate-mapping-3.0.dtd"> <hibernate-configuration>
我遇到了同样的问题,所以我只是下载了配置文件中提到的那个文件,并将其放在“/home/ist/Downloads/hibernate-configuration-3.0.dtd”的路径中,并将该路径提供给配置文件,它工作。希望对你也有帮助。
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"/home/ist/Downloads/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/HibernateDB</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- JDBC connection pool settings ... using built-in test pool -->
<property name="connection.pool_size">10</property>
<!-- Select our SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo the SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create
</property>
<mapping resource="resource/actor.hbm.xml"/>
</session-factory>
</hibernate-configuration>
很多时候它是因为您的 System.To 上没有连接互联网而发生的 System.To 在 Hibernate 互联网上工作是强制性的。
在我的应用程序中尝试使用 Hibernate
时出现以下错误:
org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
这是什么原因造成的?请参阅下面的 hibernate.cfg.xml
、 output
和 Runner class
?
注意:我查看了 this answer 并尝试使用建议修复它,但没有成功。
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">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test-db</property>
<property name="connection.username">user</property>
<property name="connection.password">password</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Use XML-based mapping metadata -->
<!-- <mapping resource="domain/Message.hbm.xml"/> -->
<!-- Use Annotation-based mapping metadata -->
<mapping class="entity.Message"/>
</session-factory>
</hibernate-configuration>
输出:
Successfully started process 'command 'C:\Program Files\Java\jdk1.8.0_65\bin\java.exe''
Dec 16, 2015 12:01:20 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
Dec 16, 2015 12:01:20 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.5.Final}
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: hibernate.cfg.xml
Dec 16, 2015 12:01:21 AM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: hibernate.cfg.xml
Initial SessionFactory creation failed.org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
at util.HibernateUtil.buildSessionFactory(HibernateUtil.java:25)
at util.HibernateUtil.<clinit>(HibernateUtil.java:12)
at client.HelloWorldClient.main(HelloWorldClient.java:13)
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 util.HibernateUtil.buildSessionFactory(HibernateUtil.java:18)
... 2 more
Caused by: org.dom4j.DocumentException: Error on line 2 of document : The processing instruction target matching "[xX][mM][lL]" is not allowed. Nested exception: The processing instruction target matching "[xX][mM][lL]" is not allowed.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2155)
... 4 more
:run FAILED
:run (Thread[Daemon worker Thread 15,5,main]) completed. Took 0.617 secs.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':run'.
> Process 'command 'C:\Program Files\Java\jdk1.8.0_65\bin\java.exe'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.
BUILD FAILED
亚军Class:
package client;
import org.hibernate.Session;
import util.HibernateUtil;
import entity.Message;
public class HelloWorldClient {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Message message = new Message( "Hello World with Hibernate & JPA Annotations" );
session.save(message);
session.getTransaction().commit();
session.close();
}
}
编辑:将鼠标悬停在会话工厂标签上时出现错误:
为了被解析为 xml,您的 hibernate.cfg.xml 应该以:
开头<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
检查 hibernate.cfg.xml 中的以下内容:
- 检查
<?xml ?>
前是否有空白space或其他内容
- 检查 hibernate.cfg.xml 中是否有另一个
- 检查
<?xml ?>
(http://www.w3.org/International/questions/qa-byte-order-mark#remove) 之前是否有字节顺序标记 (BOM)
<?xml ?>
定义
配置文件的第二行有问题。尝试如下更改 DTD 文件的位置。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
希望对您有所帮助。
能否请您尝试以下配置细节,并确保您已将 hibernate.cfg.xml 文件放在 SRC 目录下。如果非要放置src以外的cfg文件,必须在创建SessionFactory时在Configuration()中指定路径。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property>
<property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/hibernatex </property>
<property name="hibernate.connection.username"> root </property>
<property name="hibernate.connection.password"> root </property>
<property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property>
<mapping resource="com/ora/hibernate/examples/Employee.hbm.xml"
package="com.ora.hibernate.examples" />
</session-factory>
</hibernate-configuration>
我能够解决问题所在。问题是我的 hibernate.cfg.xml
文件不在我项目中的 "resources" 目录下。
这解决了我遇到的所有问题,而且我不需要更改文件中的代码。
这是因为您的 Internet 阻止从该 DTD 获取数据。 只需下载 xml 文件中提到的所有 DTD,并在所有 xml 文件中给出这样的位置。 这对我有用
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "C:\Downloads\hibernate-mapping-3.0.dtd"> <hibernate-configuration>
我遇到了同样的问题,所以我只是下载了配置文件中提到的那个文件,并将其放在“/home/ist/Downloads/hibernate-configuration-3.0.dtd”的路径中,并将该路径提供给配置文件,它工作。希望对你也有帮助。
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"/home/ist/Downloads/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/HibernateDB</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- JDBC connection pool settings ... using built-in test pool -->
<property name="connection.pool_size">10</property>
<!-- Select our SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo the SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">create
</property>
<mapping resource="resource/actor.hbm.xml"/>
</session-factory>
</hibernate-configuration>
很多时候它是因为您的 System.To 上没有连接互联网而发生的 System.To 在 Hibernate 互联网上工作是强制性的。