从Hibernate ORM 5.2.8开始,MariaDB获得自己的Hibernate方言。
为什么?
在开发新的MariaDB方言时,我意识到MySQL方言将受益于简化版本层次结构。
以前,MySQL方言看起来是这样的

如你所见,由于MySQL存储引擎的多样性(例如MyISAM和InnoDB),类层次结构已经出现了多个分支。一旦我们集成了Hibernate Spatial,MySQL方言变得更加复杂。
因此,我们创建了HHH-11473 Jira问题,该问题已在Hibernate 5.2.9中修复。
我们现在如何?
重构后,MySQL方言看起来如下

以下方言已被弃用,因此它们未被添加到上面的类图中
MySQLMyISAMDialect
-
使用
MySQLDialect
,以及hibernate.dialect.storage_engine=myisam
环境变量或系统属性。 MySQLInnoDBDialect
-
使用
MySQLDialect
,以及hibernate.dialect.storage_engine=innodb
环境变量或系统属性。 MySQL5InnoDBDialect
-
使用
MySQL5Dialect
,以及hibernate.dialect.storage_engine=innodb
环境变量或系统属性。 MySQL57InnoDBDialect
-
使用
MySQL57Dialect
。 MySQL5InnoDBSpatialDialect
-
使用
MySQL5SpatialDialect
,以及hibernate.dialect.storage_engine=innodb
环境变量或系统属性。 MySQL56InnoDBSpatialDialect
-
使用默认为InnoDB的
MySQL56SpatialDialect
。
MySQLStorageEngine
抽象封装了不同存储引擎之间的差异,通过将此责任委托给新的抽象,MySQL方言层次结构变得简单多了。
传统上,MySQL使用非事务性的MyISAM
存储引擎,这也是所有旧于MySQL55Dialect
的方言的默认存储引擎。从MySQL55Dialect
开始,默认使用InnoDB
存储引擎。
您可以通过提供 hibernate.dialect.storage_engine
环境变量或系统属性来始终覆盖默认的存储引擎。与其他 Hibernate 配置属性不同,此属性不得通过 persistence.xml
提供,因为方言是在配置管理机制启动之前启动的。