Java Hibernate反序列化失败求助:无法解析hibernate.cfg.xml
问题排查与解决方案
一、先解决JAXB实现缺失的问题
Java 9及以上版本已经把JAXB从JDK内置模块中移除了,而Hibernate解析XML配置时必须用到JAXB的实现类,所以直接在pom.xml里添加以下依赖即可:
<!-- JAXB核心API --> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>3.0.2</version> </dependency> <!-- JAXB官方实现包 --> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>3.0.2</version> <scope>runtime</scope> </dependency> <!-- Java 9+需要的激活模块 --> <dependency> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> <version>2.0.1</version> </dependency>
如果你的项目用的是Java 8,只需要保留前两个依赖,版本换成2.3.3就行,Java 8自带激活模块,不用额外加。
二、彻底解决hibernate.cfg.xml的BOM问题
删完BOM后要确保文件是UTF-8无BOM编码:
- 在IntelliJ里打开文件,点右下角的编码标识(比如显示UTF-8),选
File Encodings,在弹出的窗口里把默认编码设为UTF-8,勾选Remove BOM后重新保存。 - 也可以用记事本打开文件,选“另存为”,编码选UTF-8(别选带BOM的选项),覆盖原文件。
三、检查配置文件和依赖的正确性
1. hibernate.cfg.xml语法验证
确保标签闭合、属性正确,给你一个SQLite的基础配置模板,对照自己的文件检查:
<?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> <!-- SQLite连接配置 --> <property name="hibernate.connection.driver_class">org.sqlite.JDBC</property> <property name="hibernate.connection.url">jdbc:sqlite:./test.db</property> <property name="hibernate.connection.username"></property> <property name="hibernate.connection.password"></property> <!-- Hibernate基础配置 --> <property name="hibernate.dialect">org.hibernate.dialect.SQLiteDialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 你的实体类映射 --> <mapping class="com.yourpackage.YourEntity"/> </session-factory> </hibernate-configuration>
2. 必要依赖补充
pom.xml里必须有SQLite驱动和Hibernate核心依赖:
<!-- SQLite JDBC驱动 --> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.45.2.0</version> </dependency> <!-- Hibernate核心包 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>6.4.4.Final</version> </dependency>
如果用的是Hibernate 5.x版本,官方没有自带SQLite方言,得加第三方的:
<dependency> <groupId>net.kemitix</groupId> <artifactId>sqlite-dialect</artifactId> <version>0.1.1</version> </dependency>
同时把配置里的hibernate.dialect改成net.kemitix.hibernate.dialect.SQLiteDialect。
四、最后验证项目运行配置
- 点IntelliJ右侧Maven窗口的
Reload All Maven Projects,确保所有依赖都加载成功。 - 清理缓存:点
File->Invalidate Caches...,选Invalidate and Restart,重启后再运行项目。
内容的提问来源于stack exchange,提问作者Billy75
相关产品推荐
相关产品推荐

