mysql57dialect_@Deprecated 过时的 MySQL5InnoDBDialect

Hibernate方言用于针对特定数据库生成SQL。MySQL5InnoDBDialect在创建表时会添加'ENGINE=InnoDB',但在Hibernate 5中被@Deprecated,推荐使用MySQL55Dialect或MySQL57Dialect。MySQL55Dialect与MySQL5InnoDBDialect源码相同,因为MySQL 5.5及以后默认使用InnoDB引擎。注意,设置存储引擎应通过'hibernate.dialect.storage_engine=innodb'配置在hibernate.properties文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Hibernate方言?

Hibernate方言是用来告诉Hibernte如何对指定的数据库生成相应的SQL语句。

尽管做了很多尝试去使SQL语句标准化,但是不同的数据库支持的SQL语句还是有很多不同的地方。

所以Hibernate使用方言来辅助生成正确的SQL语句。

MySQL5Dialect与MySQL5InnoDBDialect有什么区别?

他们最大的区别是,在使用Hibernate创建表时MySQL5InnoDBDialect会在生成的建表SQL语句最后加上"ENGINE=InnoDB"。

InnoDB是一种MySQL数据库引擎.MySQL5.5及之后使用它做为默认引擎。它提供了ACID兼容的事务(Transaction)功能,并提供外键支持。

MySQLDialect与MySQL5Dialect有什么区别?

MySQLDialect是针对MySQL5之前的版本。主要变化还是在于建表SQL语句。

MySQL由于4到5还是有不小的变化。比如varchar在4及之前版本最大长度限制为255,5及之后版本最大长度限制为65535。

MySQLInnoDBDialect会在生成的建表SQL语句最后加上"TYPE=InnoDB"。

MySQL5InnoDBDialect过时了

升级到 Hibernate 5 的时候,就会发现 MySQL5InnoDBDialect,被标注@Deprecated也就是过时了。不仅仅是 MySQL5InnoDBDialect 过时了,所有带InnoDB的 Dialect 都被标注过时了@Deprecated;在标注有 InnoDBDialect 过时的同时 新加了 MySQL55Dialect 及 MySQL57Dialect。

如果查看源码就会发现 MySQL55Dialect 与 MySQL5InnoDBDialect 源码一模一样。

毕竟 MySQL 从 5.5 开始就默认使用 InnoDB 引擎,MySQL 8 已经移除了 MyISAM 引擎。Hibernate 的作者认为Dialect分为两类就没有什么必要了。

org.hibernate.dialect.MySQL55Dialect

org.hibernate.dialect.MySQL57Dialect

1

2

3

org.hibernate.dialect.MySQL55Dialect

org.hibernate.dialect.MySQL57Dialect

后记

Hibernate 作者最坑的地方是标注了@Deprecated之时,补了一个注释“Use "hibernate.dialect.storage_engine=innodb" environment variable or JVM system property instead.”,导致我以为是通过配置的方式来指定引擎。我在 Spring Boot 中各种拼配置都没成功,后来发现这个配置是要写在 classpath 下的 hibernate.properties 内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值