JUnit测试Hibernate配置文件时遇解组异常求助
解决Hibernate配置文件反序列化异常(ConfigurationException)
1. 先查hibernate.cfg.xml的语法问题
这个报错90%是XML本身格式错了,逐行核对:
- 开头必须有正确的XML声明:
<?xml version="1.0" encoding="UTF-8"?>,别用中文引号,编码要和文件实际编码一致 - 所有标签必须成对闭合,比如
<hibernate-configuration>对应</hibernate-configuration>,<session-factory>对应</session-factory>,别漏写闭合标签 - 属性标签格式要规范,比如
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db_name</property>,属性名和值的引号要完整,不能有拼写错误 - 注释不能嵌套,
<!-- 注释内容 -->要写完整,别留半截
2. 确认配置文件的存放位置
- 把
hibernate.cfg.xml放在src/main/resources(主代码)或src/test/resources(测试代码)目录下,Hibernate默认从类路径根目录加载这个文件 - 执行Maven命令
mvn clean test,然后去target/test-classes目录下看看有没有这个配置文件,没复制过去的话就是路径不对
3. 核对依赖版本是否兼容
- 确保pom.xml里Hibernate相关依赖版本统一,比如
hibernate-core和hibernate-entitymanager(如果用的话)必须同版本 - 用MySQL 8.0+的话,
mysql-connector-java版本要在8.0以上,同时Hibernate建议用5.4.x及以上版本,避免驱动和框架不匹配 - 别重复引入冲突依赖,比如新版本Hibernate已经把注解整合到
hibernate-core里了,不用再单独加hibernate-annotations
4. 检查XML文件编码
- 确保文件编码是UTF-8,别用GBK等其他编码,特殊字符会导致解析失败
- IDE里右键文件,查看“File Encoding”设置,改成UTF-8,IntelliJ用户可以勾选“Transparent native-to-ascii conversion”
5. 单独测试配置文件加载
先排除DAO代码的干扰,写个简单测试验证配置文件能不能正常加载:
@Test public void testConfigLoad() { try { Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); sessionFactory.close(); System.out.println("配置文件加载成功"); } catch (Exception e) { e.printStackTrace(); } }
这段代码报错的话,问题肯定在配置文件或依赖上;能跑通再去查PcBuildDao的逻辑
6. 检查Maven的资源配置
确保pom.xml里的build节点正确包含resources目录,避免配置文件没被打包:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> </resource> <resource> <directory>src/test/resources</directory> <filtering>false</filtering> </resource> </resources> </build>
内容的提问来源于stack exchange,提问作者Frank Christian
相关产品推荐
相关产品推荐

