hibernate.cfg.xml 是 Hibernate 5 及更早版本的核心 XML 配置文件,需置于类路径根目录,以 为根元素、 包裹配置项,定义数据库连接、方言、映射等;Hibernate 6 已弃用并移除支持。

hibernate.cfg.xml 是什么
hibernate.cfg.xml 是 Hibernate 5 及更早版本中用于声明式配置的核心 XML 文件,它定义了数据库连接参数、方言、映射资源等运行时必需信息。从 Hibernate 6 开始,官方已弃用该文件,推荐改用 hibernate.properties 或程序化配置(如 Configuration API + Java 类)。但大量遗留项目仍在使用它,尤其在 Spring Boot 2.x 未全面接管前的纯 Hibernate 项目中。
怎么写一个可用的 hibernate.cfg.xml
文件必须放在类路径根目录(如 src/main/resources/),且根元素为 。常见错误是漏掉 包裹,或把属性名写成 hibernate.connection.url(正确应为 connection.url)。
com.mysql.cj.jdbc.Driver jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC root 123456 zuojiankuohaophpcnproperty name="dialect"youjiankuohaophpcnorg.hibernate.dialect.MySQL8Dialectzuojiankuohaophpcn/propertyyoujiankuohaophpcn zuojiankuohaophpcnproperty name="hbm2ddl.auto"youjiankuohaophpcnupdatezuojiankuohaophpcn/propertyyoujiankuohaophpcn zuojiankuohaophpcnproperty name="show_sql"youjiankuohaophpcntruezuojiankuohaophpcn/propertyyoujiankuohaophpcn zuojiankuohaophpcnmapping class="com.example.User"/youjiankuohaophpcn zuojiankuohaophpcnmapping resource="com/example/Order.hbm.xml"/youjiankuohaophpcn zuojiankuohaophpcn/session-factoryyoujiankuohaophpcn
connection.url中的&是 XML 实体转义,不是拼写错误;少一个;会导致解析失败dialect必须与数据库版本严格匹配:MySQL 5.7 用MySQL57Dialect,MySQL 8+ 用MySQL8Dialect,否则可能报Unknown column 'generatedAlias1' in 'field list'hbm2ddl.auto设为update时,Hibernate 不会删字段或表,只加或改;设为create-drop则每次 SessionFactory 关闭时清空表 —— 切勿在生产环境用为什么 new Configuration().configure() 找不到 hibernate.cfg.xml
最常见原因是文件没放对位置,或构建工具(Maven/Gradle)没把
src/main/resources加入 classpath。另一个隐蔽问题是用了 IDE 的“Run As → Java Application”,但 IDE 默认只把src/main/java加进 classpath,忽略 resources 目录。
- 检查编译后输出目录(如
target/classes/)里是否存在hibernate.cfg.xml- 显式指定路径可绕过查找逻辑:
new Configuration().configure("hibernate-test.cfg.xml"),此时文件名可自定义- 若用 Maven,确认
pom.xml没误删配置段;Gradle 用户需检查sourceSets.main.resources.srcDirs- 调用
configure()前加一行System.out.println(Configuration.class.getResource("/hibernate.cfg.xml"));,返回null即说明加载失败hibernate.cfg.xml 和 Spring Boot 的 application.yml 冲突吗
会。Spring Boot 2.0+ 默认自动装配 Hibernate,只要 classpath 有
spring-boot-starter-data-jpa,就会忽略hibernate.cfg.xml—— 它只读取application.yml或application.properties中以spring.jpa.*开头的配置项。此时硬放hibernate.cfg.xml不生效,还可能因重复配置引发警告(如HikariPool-1 - Driver does not support get/set network timeout for connections)。
- 若坚持用 XML 配置,需禁用 Spring Boot 的自动配置:
@SpringBootApplication(exclude = {JpaRepositoriesAutoConfiguration.class})- 更稳妥的做法是把原
hibernate.cfg.xml内容平移过去:spring.jpa.hibernate.ddl-auto=update、spring.jpa.show-sql=true等- 注意
spring.jpa.properties.hibernate.前缀:例如hibernate.dialect要写成spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialectHibernate 6 彻底移除了对
hibernate.cfg.xml的支持,升级时必须迁移。哪怕不升级,也建议尽早转向 Java 配置或 Spring Boot 风格 —— XML 配置缺乏编译期校验,拼错一个属性名,要到运行时才暴露。










