You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate构建SessionFactory报UnmarshalException异常问题

问题定位

抛出javax.xml.bind.UnmarshalException并提示session-factory元素的内容类型为仅允许嵌套子元素,不能包含字符类子节点,是典型的hibernate.cfg.xmlXML格式非法问题:<session-factory>标签内部存在未被合法XML标签包裹的文本节点,和使用的Tomcat、JDK、Hibernate版本本身没有直接关系。

常见触发场景:

  • 配置编写时在标签间隙误输入了零散文字、乱码字符
  • XML注释格式错误,比如漏写注释闭合符-->,导致注释内容被解析为普通文本
  • 配置项书写错误,把本该放在<property>等标签内部的参数值写到了标签外部
  • 从网页/文档复制配置时带入了不可见特殊字符(零宽空格、全角空格、控制字符等),这类字符不会在编辑器里正常显示,但会被XML解析器识别为文本节点
修复步骤
  1. 直接跳转到hibernate.cfg.xml第17行第27列的报错位置,逐字符检查<session-factory>开标签到对应</session-factory>闭标签之间的所有内容:
    • 所有非注释内容必须包裹在合法的配置标签(<property>、<mapping>等)内部
    • 所有注释必须严格符合<!-- 注释文本 -->格式,不能漏写两端的标记
    • 直接删除所有不在标签包裹范围内的零散字符
  2. 如果肉眼找不到异常字符,可以把<session-factory>标签对之间的所有内容剪切到纯文本编辑器(比如系统自带记事本)清除格式,核对配置项无误后再粘贴回原文件,能一次性清除所有不可见特殊字符
  3. 保存配置后重启Tomcat验证,正常情况下SessionFactory实例可以正常初始化,不会再返回null
兼容兜底校验

如果修复XML格式后仍报错,再核对两个JDK11适配点:

  1. JDK11移除了默认内置的JAXB组件,Hibernate 5.4解析配置时依赖这个包,需要在pom.xml中补充依赖:
<!-- JDK11+ 适配Hibernate所需JAXB依赖 -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.1</version>
</dependency>
  1. 确认hibernate.cfg.xml放在项目的类加载根路径(一般是src/main/resources目录),避免FactoryProvider读取到损坏的错误配置文件。

内容的提问来源于stack exchange,提问作者Pankaj Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:18:49