什么是Hibernate方言和方言列表
Hibernate中的方言–方言是Java JDBC类型和SQL类型之间的类和桥梁,其中包含Java语言数据类型和数据库数据类型之间的映射。Dialect允许Hibernate生成针对特定关系数据库优化的SQL。Hibernate基于Dialect该类为特定数据库生成查询。
1.Hibernate方言类
- 创建JPAEntityManagerFactory或HibernateSessionFactory实例后,Dialect将在内部创建该实例。
- 当Dialect实例创建时,它注册所有的配置提供方言的SQL函数,翻译Hibernate查询SQL查询,也登记所有SQL类型和Java JDBC类型到Java类型映射到数据库类型,反之亦然。
- 对于所有数据库,SQL类型都不相同,因此特定的数据库将具有特定的方言,例如,DB2数据库的org.hibernate.dialect.DB2Dialect方言是,MySql 5数据库的方言是org.hibernate.dialect.MySQL5Dialect。
- 从一个数据库切换到另一个数据库时,一项主要更改就是将对应的Dialect更改为该数据库。
- 要实现自定义方言,扩展Dialect类Sub类应提供一个公共的默认构造函数,该构造函数注册一组类型映射和默认的Hibernate属性。子类应该是不可变的。
2.示例方言配置
2.1。hibernate.properties示例:db2数据库的Hibernate方言
hibernate.connection.driver_class = com.ibm.db2.jcc.DB2Driver
hibernate.connection.url = jdbc:db2://<host>:<port50000>/<dbname>
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.dialect = org.hibernate.dialect.DB2Dialect
2.2。hibernate.cfg.xml示例:org.hibernate.dialect.MySQL8Dialect
<property name="connection.url">jdbc:mysql://localhost:3306/jpa_jbd?serverTimezone=UTC&useSSL=false</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
2.3。HibernateConfiguration示例:mysql方言
Configuration cfg = new Configuration()
.addClass(org.javabydeveloper.domain.Student.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect")
.setProperty("hibernate.connection.datasource", "jdbc:mysql://localhost:3306/<dbname>")
.setProperty("hibernate.order_updates", "true");
2.4。JPA persistence.xml示例:PostgreSQL方言
<persistence-unit name="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost/dbName" />
<property name="javax.persistence.jdbc.user" value="dbuser" />
<property name="javax.persistence.jdbc.password" value="password" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
</properties>
</persistence-unit>
3.为什么要在Hibernate中使用方言?
当需要将实体映射和Hibernate查询转换为特定于数据库的特定查询时,Hibernate会使用Dialect生成所有实体映射和Hibernate查询到“特定数据库”查询,并使用JDBC来执行它们。让我们看一个示例,下图显示了有关Dialect的清晰图片。
如果将hbm2ddl.auto设置为在配置中创建并创建会话工厂new Configuration().configure().buildSessionFactory():
- 对于所有实体,Hibernate都会为创建表生成本机查询,并使用JDBC执行该查询。
- 为了生成本机查询,Hibernate使用您的实体映射并使用提供的方言类将Java类型映射到数据库数据类型。
- 同样,当需要创建特定于数据库的查询时,Hibernate将使用Dialect类。
4.如果不指定方言怎么办?
如果未在配置中指定Dialect类,则对于大多数Hibernate数据库,请尝试从数据库连接解析方言名称。最好的做法是提供方言,以便HibernateDialect为特定的数据库版本标识适当的类。
5. Hibernate中的SQL方言列表
org.hibernate.dialect包中提供了所有Hibernate方言。以下是Hibernate中流行的SQL方言列表。
方言名称 |
方言类 |
描述 |
DB2 |
org.hibernate.dialect.DB2Dialect |
DB2的SQL方言。 |
DB2 AS / 400 |
org.hibernate.dialect.DB2400Dialect |
DB2 / 400的SQL方言。 |
DB2 OS390 |
org.hibernate.dialect.DB2390Dialect |
DB2 / 390的SQL方言。 |
DB2390V8方言 |
org.hibernate.dialect.DB2390V8Dialect |
DB2 / 390版本8的SQL方言。 |
DB2400V7R3Dialect |
org.hibernate.dialect.DB2400V7R3Dialect |
i的SQL方言。 |
DB297方言 |
org.hibernate.dialect.DB297Dialect |
DB2 9.7的SQL方言。 |
H2 |
org.hibernate.dialect.H2Dialect |
与H2数据库兼容的方言。 |
HyperSQL(HSQL) |
org.hibernate.dialect.HSQLDialect |
与HSQLDB(HyperSQL)兼容的SQL方言。 |
Informix |
org.hibernate.dialect.InformixDialect |
似乎可以与Informix Dynamic Server版本7.31.UD3,Informix JDBC驱动程序版本2.21JC3一起使用。 |
英格利斯 |
org.hibernate.dialect.IngresDialect |
用于Ingres 9.2的SQL方言。 |
英格利斯9 |
org.hibernate.dialect.Ingres9Dialect |
用于Ingres 9.3和更高版本的SQL方言。 |
Ingres 10 |
org.hibernate.dialect.Ingres10Dialect |
用于Ingres 10和更高版本的SQL方言。 |
玛丽亚方言 |
org.hibernate.dialect.MariaDBDialect |
这是所有MariaDB方言的基类,并且可以与任何MariaDB版本一起使用 |
玛丽亚DB53方言 |
org.hibernate.dialect.MariaDB53Dialect |
旨在与MariaDB 5.3或更高版本一起使用 |
玛丽亚DB10方言 |
org.hibernate.dialect.MariaDB10Dialect |
MariaDB 10或更高版本 |
玛丽亚DB103方言 |
org.hibernate.dialect.MariaDB103Dialect |
适用于MariaDB 10.3和更高版本的SQL方言提供序列支持,锁定超时等。 |
玛丽亚DB102方言 |
org.hibernate.dialect.MariaDB102Dialec |
MariaDB 10.2或更高版本 |
Microsoft SQL Server 2000 |
org.hibernate.dialect.SQLServerDialect |
Microsoft SQL Server 2000的方言 |
Microsoft SQL Server 2005 |
org.hibernate.dialect.SQLServer2005Dialect |
Microsoft SQL 2005的方言。 |
Microsoft SQL Server 2008年 |
org.hibernate.dialect.SQLServer2008Dialect |
带有JDBC Driver 3.0及更高版本的Microsoft SQL Server 2008的方言 |
Microsoft SQL Server 2012 |
org.hibernate.dialect.SQLServer2012Dialect |
Microsoft SQL Server 2012方言 |
的MySQL |
org.hibernate.dialect.MySQLDialect |
MySQL的SQL方言(低于5.x)。 |
带有InnoDB的MySQL |
org.hibernate.dialect.MySQLInnoDBDialect |
弃用使用“ hibernate.dialect.storage_engine = innodb”环境变量或JVM系统属性。 |
MySQL与MyISAM |
org.hibernate.dialect.MySQLMyISAMDialect |
不建议使用“ hibernate.dialect.storage_engine = myisam”环境变量或JVM系统属性。 |
MySQL5的 |
org.hibernate.dialect.MySQL5Dialect |
用于MySQL 5.x特定功能的SQL方言。 |
带有InnoDB的MySQL5 |
org.hibernate.dialect.MySQL5InnoDBDialect |
弃用使用“ hibernate.dialect.storage_engine = innodb”环境变量或JVM系统属性。 |
MySQL8方言 |
org.hibernate.dialect.MySQL8Dialect |
MySQL 8.x特定功能的SQL方言。 |
甲骨文8i |
org.hibernate.dialect.Oracle8iDialect |
Oracle 8i的方言。 |
甲骨文9i |
org.hibernate.dialect.Oracle9iDialect |
Oracle 9i数据库的方言。 |
Oracle 10g及更高版本 |
org.hibernate.dialect.Oracle10gDialect |
专用于Oracle 10g的方言。 |
甲骨文12cDialect |
org.hibernate.dialect.Oracle12cDialect |
Oracle 12c的SQL方言。 |
OracleTypesHelper |
org.hibernate.dialect.OracleTypesHelper |
用于处理OracleTypes类的助手 |
PostgreSQL 8.1 |
org.hibernate.dialect.PostgreSQL81Dialect |
Postgres的SQL方言 |
PostgreSQL 8.2 |
org.hibernate.dialect.PostgreSQL82Dialect |
用于Postgres 8.2和更高版本的SQL方言,在删除表时增加了对“如果存在”的支持 |
PostgreSQL 9及更高版本 |
org.hibernate.dialect.PostgreSQL9Dialect |
Postgres 9及更高版本的SQL方言。 |
PostgreSQL91语言 |
org.hibernate.dialect.PostgreSQL91Dialect |
用于Postgres 9.1和更高版本的SQL方言添加了对PARTITION BY的支持,作为关键字。 |
PostgreSQL92方言 |
org.hibernate.dialect.PostgreSQL92Dialect |
Postgres 9.2及更高版本的SQL方言增加了对JSON数据类型的支持 |
PostgreSQL93方言 |
org.hibernate.dialect.PostgreSQL93Dialect |
PostgreSQL 9.3及更高版本的SQL方言。 |
PostgreSQL94方言 |
org.hibernate.dialect.PostgreSQL94Dialect |
Postgres 9.4及更高版本的SQL方言。 |
PostgreSQL95方言 |
org.hibernate.dialect.PostgreSQL95Dialect |
Postgres 9.5及更高版本的SQL方言。 |
PostgreSQL方言 |
org.hibernate.dialect.PostgreSQLDialect |
不推荐使用使用 PostgreSQL82Dialect 替代 |
PostgresPlus方言 |
org.hibernate.dialect.PostgrePlusDialect |
Postgres Plus的SQL方言 |
SAP数据库 |
org.hibernate.dialect.SAPDBDialect |
与SAP DB兼容的SQL方言。 |
SAP HANA(列存储) |
org.hibernate.dialect.HANAColumnStoreDialect |
SAP HANA列存储的SQL方言。 |
SAP HANA(行存储) |
org.hibernate.dialect.HANARowStoreDialect |
SAP HANA行存储的SQL方言。 |
Sybase公司 |
org.hibernate.dialect.SybaseDialect |
所有Sybase方言共享一个IN列表大小限制。 |
Sybase 11 |
org.hibernate.dialect.Sybase11Dialect |
适用于Sybase 11.9.2的SQL方言(特别是:避免使用ANSI JOIN语法) |
Sybase ASE 15.5 |
org.hibernate.dialect.SybaseASE15Dialect |
针对Sybase Adaptive Server Enterprise(ASE)15及更高版本的SQL方言。 |
Sybase ASE 15.7 |
org.hibernate.dialect.SybaseASE157Dialect |
针对Sybase Adaptive Server Enterprise(ASE)15.7和更高版本的SQL方言。 |
Sybase Anywhere |
org.hibernate.dialect.SybaseAnywhereDialect |
用于Sybase Anywhere的SQL方言扩展了Sybase(企业)方言(在ASA 8.x上测试) |
Teradata14方言 |
org.hibernate.dialect.Teradata14Dialect |
Teradata数据库的方言 |
Teradata |
org.hibernate.dialect.TeradataDialect |
MCR在方言认证过程中为Teradata数据库创建的方言。 |
5.结论
在本指南中,我们介绍了什么是方言以及为什么要在“Hibernate”和“流行的Hibernate方言列表”中使用它。
参考文献
- 方言类hibernatedoc
- Hibernate用户手册
- MariaDB JbossDoc
- JPA MySQL示例
什么是Hibernate方言和方言列表相关推荐
- Hibernate中的方言
前言 在部署某个项目代码时,使用maven clean package wildfly:deploy命令部署到wild服务器时总是报错(报错信息暂时无法提供了).后经查询,是Hibernate方言的问 ...
- hibernate 的dialect(方言)配置
RDBMS方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS39 ...
- mysql5.5的方言_mysql方言问题
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 22:28:59,414 INFO [hibernate.dialect.Dialect] Using dialect: org.hibernate.di ...
- gradle mysql方言_Ktorm | 方言与原生 SQL
编辑本页 方言与原生 SQL 我们知道,SQL 语言虽然存在统一的标准,但是在标准之外,各种数据库都有着自己独特的特性.Ktorm 的核心模块(ktorm-core)仅对标准 SQL 提供了支持,如果 ...
- mybatis mysql方言_MyBatis 方言支持 - Mysql to 华为高斯数据库(gaussdb)
1.spring-config-mybatis.xml文件加入方言支持(只列出必要字段) 配置说明:key:数据库类型-mybatis可以根据数据源类型自动识别 value:mapper xml文件中 ...
- 方言 —— 各地方言
1. 安徽 鸡:zi,洗:si: 2. 湖南 湖南:funan,
- oracle 数据转换不报错,oracle数据库与hibernate方言转型异常
oracle数据库与hibernate方言转型异常 报错信息: org.hibernate.MappingException: No Dialect mapping for JDBC type: -9 ...
- java里dialect_iBatis3基于方言(Dialect)的分页
(注:以下代码是基于ibatis3 beta4的扩展,ibatis3正式版如果实现改变,将会继续跟进修改) iBatis3默认使用的分页是基于游标的分页,而这种分页在不同的数据库上性能差异不一致,最好 ...
- mysql dialect配置_iBatis3基于方言(Dialect)的分页
(注:以下代码是基于ibatis3 beta4的扩展,ibatis3正式版如果实现改变,将会继续跟进修改) iBatis3默认使用的分页是基于游标的分页,而这种分页在不同的数据库上性能差异不一致,最好 ...
最新文章
- HashSet的使用
- java初学者指南_Java代理初学者指南
- getAttribute实例例java_Java ExifInterface.getAttribute方法代码示例
- 数据倾斜是什么以及造成的原因?
- 微软自带的浏览器Microsoft Edge不能上网的解决办法
- 鹅厂算法大神干货实录,初赛通关“秘籍”还不赶快来GET!
- 独立站的优势是什么?独立站注意事项有哪些?
- android得到assets下面的资源
- 去掉windows10“更新并关机”
- “广” “专”的抉择 -- 个人技术发展之我见!
- 霍兰德SR型如何选专业?霍兰德职业兴趣测试
- 《Dreamweaver CS6 完全自学教程》笔记 第一章:网页制作基础知识
- Java面试题目(非通用模板)
- 不要迷信微服务,微服务就是个传说
- Win10卸载OneDrive
- 什么是自律性?如何提高自律性?
- 一个不错的金蝶KIS专业版条码扫描插件
- 314-哈夫曼树和哈夫曼编码
- www.cjfx.net 读书人的网站 新华书业 崇文书城 新华之星
- GBoost 和 xGBoost
热门文章
- 杨百万:上周四全仓杀入股市 这波反弹不是牛市新起点
- 离散数学 第十六章 环和域
- Python_Task02:条件、循环结构
- cst是什么时间(Cst是什么检查)
- LiveUpdate Adminstrator配置手册
- SVM(核函数、高斯核函数RBF)
- Python-OpenCV图像处理(一):读取并指定窗口大小显示图片
- linux ps -ef和ps -fu,linux ps命令详解
- 解决打开S7-PLCSIM Advanced V3.0报错NetGroup Packet Filter Driver (NPF)
- SSM项目之电商系统-爱生鲜