使用 mysql 进行休眠配置会出现错误 - SAXParseException

Posted

技术标签:

【中文标题】使用 mysql 进行休眠配置会出现错误 - SAXParseException【英文标题】:Hibernate configuration with mysql gives ERROR - SAXParseException 【发布时间】:2011-09-03 07:03:21 【问题描述】:

我正在尝试使用 mysql 配置休眠。

下面是hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>    
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/TestDB</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root123</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>


        <property name="hdm2ddl.auto">create</property>property>
        <property name="show_sql">false</property>


        <!-- Use the C3P0 connection pool provider -->
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">20</property>
        <property name="hibernate.c3p0.timeout">300</property>
        <property name="hibernate.c3p0.max_statements">50</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>

        <mapping resource="com/psl/course/Course.hbm.xml"/>

    </session-factory>
</hibernate-configuration>

但是,我遇到了以下错误。堆栈跟踪如下,

15 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA
31 [main] INFO org.hibernate.cfg.Environment - hibernate.properties 未找到
31 [main] INFO org.hibernate.cfg.Environment - 字节码提供者名称:javassist
47 [main] INFO org.hibernate.cfg.Environment - 使用 JDK 1.4 java.sql.Timestamp 处理
78 [main] INFO org.hibernate.cfg.Configuration - 从资源配置:/hibernate.cfg.xml
78 [main] INFO org.hibernate.cfg.Configuration - 配置资源:/hibernate.cfg.xml
156 [main] 错误 org.hibernate.util.XMLHelper - 解析 XML 时出错:/hibernate.cfg.xml(26) 元素类型“session-factory”的内容必须匹配“(property*,mapping*,(class-cache |collection-cache)*,event*,listener*)”。
初始 SessionFactory 创建 failed.org.hibernate.MappingException:无效配置
线程“主”java.lang.ExceptionInInitializerError 中的异常
    在 com.psl.util.HibernateUtil.(HibernateUtil.java:13)
    在 com.psl.course.Main.saveCourse(Main.java:34)
    在 com.psl.course.Main.main(Main.java:16)
引起:org.hibernate.MappingException:无效配置
    在 org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1521)
    在 org.hibernate.cfg.Configuration.configure(Configuration.java:1462)
    在 org.hibernate.cfg.Configuration.configure(Configuration.java:1448)
    在 com.psl.util.HibernateUtil.(HibernateUtil.java:10)
    ... 2 更多
原因:org.xml.sax.SAXParseException:元素类型“session-factory”的内容必须匹配“(property*,mapping*,(class-cache|collection-cache)*,event*,listener*)”。
    在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(未知来源)
    在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(未知来源)
    在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(未知来源)
    在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(未知来源)
    在 com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(未知来源)
    在 com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(未知来源)
    在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(未知来源)
    在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(未知来源)
    在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知来源)
    在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知来源)
    在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知来源)
    在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(未知来源)
    在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(未知来源)
    在 org.dom4j.io.SAXReader.read(SAXReader.java:465)
    在 org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1518)
    ... 5 更多

请帮忙,我哪里出错了?

【问题讨论】:

你能告诉我们的内容吗?我认为它在Course.hbm.xml上的映射异常 评论中有一个愚蠢的拼写错误,如下所示!这就是问题所在。不过感谢您的回复:) 在运行项目之前,如果您使用的是 IDE,则应该验证 XML。 【参考方案1】:

您在 XML 中有错字:

<property name="hdm2ddl.auto">create</property>property>

【讨论】:

感谢 axtavt,错字是问题..!【参考方案2】:

会话工厂的定义顺序必须遵循异常中的hte顺序

property*,mapping*,(class-cache|collection-cache),event,listener*

我猜张贴的 cfg.xml 文件不是整个文件。 (原始文件中的第 26 行)

【讨论】:

以上是关于使用 mysql 进行休眠配置会出现错误 - SAXParseException的主要内容,如果未能解决你的问题,请参考以下文章

H2 的休眠多租户问题:错误的架构

Hibernate 5.1.0 错误无法执行解组并且找不到元素“休眠配置”的声明

msgrcv - SA_RESTART 标志不起作用

如何配置休眠 jpa 以使用 mysql ndb(集群)

在java中配置hibernate,mysql时出错

在休眠配置文件中设置 HSQLDB 数据类型?