Bij*_*ain 16 java database hibernate mariadb
在Hibenate我正在使用MariaDB,但我找不到MariaDB的方言类名.
在Hibernate中,MySQL5方言的名字是
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
Run Code Online (Sandbox Code Playgroud)
对于Oracle 10g
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
Run Code Online (Sandbox Code Playgroud)
MariaDB的方言类名是什么?
Dev*_*abc 19
使用MariaDB服务器时,应使用MariaDB Connector/J和MariaDB Hibernate方言,而不是MySQL方言.即使MariaDB是作为替代品而创建的,即使使用MySQL版本的基本功能可能会有效,但可能会出现细微的问题,或者您可能会错过某些功能.
Hibernate用户指南中目前没有提供可用的MariaDB方言的完整列表,但是在Hibernate JavaDoc中没有提到.根据您的MariaDB服务器版本,您应该选择相应的方言版本.在撰写本文时,目前的方言是:
请注意,有关详细的使用信息,您有时必须查看方言源代码.(某些方言源中有非JavaDoc用法信息注释.)
如果要更改或明确提及MariaDB方言的存储引擎,可以使用storage_engine
Hibernate变量.例如:hibernate.dialect.storage_engine = innodb
.IMO,您应该明确地执行此操作,因为切换到其他MariaDB服务器版本时,默认值可能会更改.
如果您使用的是早于10.1.2的MariaDB服务器(不支持小数秒),那么您可能希望将参数提供useFractionalSeconds=false
给JDBC URL,否则MariaDB Connector/J不会在内部截断时间戳,这可能会导致时间比较问题,当这些值在比较查询中使用时(即使使用普通JDBC),这可能导致Hibernate版本问题和时间类型的乐观锁定问题.
Hibernate用户指南中提到了用于Hibernate的MariaDB方言(撰写本文时为5.3).所提到的方言"短名称"后面的评论是:
MariaDB:支持MariadB数据库.可以使用较新的版本
MariaDB53:支持MariadB数据库,5.3及更高版本.
但是,可以在Hibernate JavaDoc中找到可用的官方MariaDB方言的完整列表.目前列出的是:
每个方言继承者都继承了先前方言版本的设置.所以MariaDB的继承层次是:MariaDB103Dialect > MariaDB102Dialect > MariaDB10Dialect > MariaDB53Dialect > MariaDBDialect > MySQL5Dialect > MySQLDialect > Dialect
MariaDB被设计为MySQL的直接替代品.但随着时间的推移,数据库可能会出现分歧.大多数基本功能可能没有问题,允许您交换Connector/J客户端(MySQL服务器上的MariaDB客户端,反之亦然),并允许您交换方言(MariaDB客户端上的MySQL方言,反之亦然).但是有微妙的差异可能会导致意想不到的问题.例如,MySQL Connector/J客户端包含服务器版本的硬编码检查,这在使用MariaDB服务器时将失败,导致在客户端中禁用某些功能,例如MySQL sendFractionalSeconds客户端参数.这将导致小数秒被禁用,因此分数将在MySQL客户端中截断,但不会在MariaDB客户端中截断.(当使用带有日期/时间类型的版本控制以及非最大精度SQL日期/时间类型时,这甚至可能导致乐观的锁定问题.在这些情况下,使用最大精度为6.)
此外,MariaDB方言有望为MariaDB提供特定的功能:http: //in.relation.to/2017/02/16/mariadb-dialects/
随着时间的推移,我们将根据MariaDB引入的新功能添加新的Dialects.
...
如果您使用的是MariaDB,那么从现在开始最好使用MariaDB特定的Dialects,因为将MariaDB版本与其相应的Hibernate Dialect相匹配要容易得多.
并且https://hibernate.atlassian.net/browse/HHH-11457说:
由于MySQL和MariaDB的方向不同,我们也可能想提供MariaDB方言.
例如,对于Hibernate用户来说,他们需要使用MySQLInnoDb57Dialect来处理自MariaDB 5.3以来一直可用的微秒精度的时间戳,这不是很直观:
"Hibernate用户指南"未提供有关如何使用方言的所有使用信息.即使用户指南与API文档结合可能还不够.有时,您必须查看源代码中的使用信息.例如,MariaDB53Dialect.java包含可能有用的隐藏的非JavaDoc注释.
以前,要选择MySQL存储引擎,例如MyISAM或InnoDB或默认,您可以在例如MySQL57InnoDBDialect
和之间切换MySQL57Dialect
.但他们从Hibernate 5.2.8开始重构MySQL方言层次结构,如Hibernate博客文章中所述.请注意,要选择存储引擎,您应该使用环境变量或系统属性:hibernate.dialect.storage_engine
.例如:hibernate.dialect.storage_engine = innodb
.
XtraDB是MariaDB 10.1及更早版本的默认MariaDB存储引擎,但自10.2以来它是InnoDB.因此,有些情况下您可能需要明确提及Hibernate选择的存储引擎,因此您必须使用该storage_engine
变量.有关storage_engine
变量的信息(用户指南中未提及)可以在源代码中找到AvailableSettings.java
.
如果您使用的是早于10.1.2的MariaDB服务器(不支持小数秒),那么您可能希望将参数提供useFractionalSeconds=false
给JDBC URL,否则MariaDB Connector/J不会在内部截断时间戳,这可能会导致时间比较问题,可能导致Hibernate版本问题和时间类型的乐观锁定问题.
归档时间: |
|
查看次数: |
24819 次 |
最近记录: |