hibernate.cfg.xml必须严格命名为该文件并置于classpath根路径,数据库连接属性须带hibernate.前缀,dialect须匹配数据库类型且版本对齐,hbm2ddl.auto生产环境禁用update/create。

hibernate.cfg.xml 文件名和位置不能错
这个文件必须叫 hibernate.cfg.xml,且必须放在 src 根目录下(或 classpath 根路径),否则 Hibernate 初始化时根本找不到它,会抛出 org.hibernate.HibernateException: Could not locate cfg.xml。不是 hibernate-config.xml,也不是 hibernate.xml,大小写也必须严格匹配。
常见错误:
- 放在 src/main/resources 下但没配置构建工具(如 Maven)将其纳入 classpath;
- IDE 中误建为普通 XML 文件,未正确标记为“资源文件”,导致编译后缺失;
- 使用 Spring Boot 项目却仍手动配 hibernate.cfg.xml,其实应优先走 application.properties,二者混用易冲突。
数据库连接四要素必须带 hibernate. 前缀
虽然旧文档里有写 connection.url 这样的简写,但 Hibernate 5+ 已明确要求所有连接属性加 hibernate. 前缀,否则会被忽略——连不上库还查不出原因,因为日志里完全不报错,只是静默 fallback 到默认值。
正确写法是:
- hibernate.connection.driver_class
- hibernate.connection.url
- hibernate.connection.username
- hibernate.connection.password
缺一不可。达梦、Oracle、MySQL 的驱动类和 URL 格式差异大,比如达梦要用 dm.jdbc.driver.DmDriver 和 jdbc:dm://localhost:5236,MySQL 8+ 则必须加 ?serverTimezone=UTC&useSSL=false 参数,否则时区或 SSL 握手失败。
hibernate.dialect 选错会导致 SQL 生成异常
方言(dialect)不是“选个差不多的就行”,它直接决定 Hibernate 如何拼 INSERT、LIMIT、ROWNUM、自增主键策略等。用 MySQL 方言连达梦,limit 10 会原样发过去,而达梦不认这个语法,直接报 SQL 解析错误;反过来,用达梦方言连 PostgreSQL,select ... for update 的写法又可能不兼容。
一款非常包包、衣服、鞋子类网站,页面干净清洁、一目了然,mttshop打造精致、简单、易用、免费的商城。 系统要求:IIS5.1以后,必须安装.net 3.5 安装步骤: 1、下载完成后,直接解压文件mttshop.rar 2、附加数据库:解压后的可以找一个叫db的文件夹,解压后直接附加就可以,支持SQL 2000、2005、2008 3、配置web.config文件,找到key=&qu
常用 dialect 示例:
- 达梦:org.hibernate.dialect.DmDialect(需额外引入达梦适配包)
- MySQL 5.7:org.hibernate.dialect.MySQL5Dialect
- MySQL 8+:org.hibernate.dialect.MySQL8Dialect
- PostgreSQL:org.hibernate.dialect.PostgreSQLDialect
别抄错包路径,net.sf.hibernate.dialect 是极老版本(Hibernate 2.x),现在全换成 org.hibernate.dialect。
hbm2ddl.auto 在生产环境必须设为 validate 或删掉
开发时图省事设成 update 或 create,上线后一启动就改表结构,轻则字段被删,重则数据清空。这不是理论风险——真实事故里,因测试环境配置误入生产,hbm2ddl.auto 把正式库的 user 表整个重建,密码字段类型从 VARCHAR(64) 变成 VARCHAR(32),导致全员无法登录。
安全做法:
- 开发/测试:用 update,但要定期导出 DDL 比对变更;
- 预发布/生产:必须设为 validate,启动时报错即止,强制人工核对;
- 更彻底:移除该配置项,交由 Flyway/Liquibase 管理 Schema 变更,Hibernate 只负责 ORM 映射。
最常被忽略的一点:方言类和驱动 JAR 必须版本对齐。比如用 Hibernate 5.6,却塞了个达梦 8.1 的 DmDriver,但没配对应的 DmDialect 实现类,就会卡在 No default constructor for dialect —— 不是配置写错了,是缺了那个 dialect 的具体实现类。









