从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 提供,因为方言是在配置管理机制启动之前启动的。