Hibernate:无法解析配置:hibernate.cfg.xml?

时间:2015-12-16 00:10:34

标签: java xml hibernate configuration

尝试在我的应用程序中使用Hibernate时出现以下错误:

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

造成这种情况的原因是什么?请参阅下面的hibernate.cfg.xmloutputRunner 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

亚军类:

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();

    }
}

编辑:将鼠标悬停在会话工厂标记上时出现错误:

enter image description here

7 个答案:

答案 0 :(得分:2)

这是因为您的互联网阻止从该DTD获取数据。 只需下载所有在xml文件中提及的DTD,并在所有xml文件中提供这样的位置。 这对我有用

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "C:\Downloads\hibernate-mapping-3.0.dtd"> <hibernate-configuration>

答案 1 :(得分:1)

为了解析为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中的以下内容:

  1. 检查<?xml ?>
  2. 之前是否有空格或其他内容
  3. 检查hibernate.cfg.xml中是否有另一个<?xml ?>定义
  4. 检查<?xml ?>http://www.w3.org/International/questions/qa-byte-order-mark#remove
  5. 之前是否有字节订单标记(BOM)

答案 2 :(得分:1)

您可以尝试使用以下配置详细信息,并确保已将 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>

答案 3 :(得分:1)

我遇到了同样的问题,所以我刚刚下载了配置文件中提到的文件并将其放在'/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>

答案 4 :(得分:0)

配置文件的第二行出错了。尝试更改DTD文件的位置,如下所示。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

More Info

希望这有帮助。

答案 5 :(得分:0)

我能够解决问题所在。问题是我的hibernate.cfg.xml文件不在我项目中的&#34; resources&#34; 目录下。

这解决了我遇到的所有问题,并且需要更改文件中的代码。

答案 6 :(得分:0)

很多时候,由于系统上没有连接Internet导致发生这种情况。在Hibernate Internet上工作是强制性的。