前言

在部署某个项目代码时,使用maven clean package wildfly:deploy命令部署到wild服务器时总是报错(报错信息暂时无法提供了)。后经查询,是Hibernate方言的问题,花了一个多小时的时间了解了一下,稍微做了一下梳理,特此分享。(PS:本人对Hibernate的具体技术细节不是很懂,故本博文还会有后续的更新修改)

每个数据的SQL语句都不一样所以就需要方言来进行转换

说白了就是HQL转SQL如何转换的问题;

知识储备

HQL和SQL

其实这部分应该放在第三部分讲解,鉴于本人的理解历程,就放在这讲了。

是什么

HQL:Hibernate Query Language,Hibernate查询语言; 
SQL:Structured Query Language,结构化查询语言;

面向对象

hql:面向对象查询;(根本区别) 
sql:面向数据库表查询;

使用方法

hql: from 后面跟的 类名 + 类对象 where + 符合条件的对象的属性; 
例如:

from User user where user age=20;

sql:from 后面跟的 表名 + where + 符合条件的字段; 
例如:

SELECT * FROM testtable WHERE age > 20;

将HQL转换成SQL

为什么

通常我们在做项目时,都是”某某框架+hibernate/JPA/JDBC+某某数据库”的形式,如果业务要求我们,要使项目能够适配多种数据库,也就是变成了”某某框架+hibernate/JPA/JDBC+某1数据库,某2数据库,某3数据库”。(比如:SpringMVC + Hibernate + MySQL,Oracle)那么,现在就需要我们把HQL语句转换成不同的SQL语句了。那么,方言就来了。

Hibernate方言

为什么

在Hibernate底层依然使用SQL语句来执行数据库操作,虽然所有关系型数据库都支持使用标准SQL语句,但所有数据库都对标准SQL进行了一些扩展,所以在语法细节上存在一些差异,因此Hibernate需要根据数据库来识别这些差异。假如系统需要数据库的变换时,那么用hibernate的话就只需要改一改配置文件(修改连接字符串、驱动类、方言等),而用传统的jdbc时,那么sql语言可能就要有很多改动。(略微重复了)

是什么

为实现HQL语句向不同数据库的SQL语句转换时,解决不同数据库之间的差异而制定的一套”规范”。 
举例来说,我们在MySQL数据库里进行分页查询,只需使用limit关键字就可以了;而标准SQL并不支持limit关键字,例如Oracle则需要使用行内视图的方式来进行分页。同样的应用程序,当我们在不同数据库之间迁移时,底层数据库的访问细节会发生改变,而Hibernate也为这种改变做好了准备,现在我们需要做的是:告诉Hibernate应用程序的底层即将使用哪 
种数据库——这就是Hibernate方言。

怎么办

简单,为hibernate设置合适的数据库方言,Hibernate将可以自动应付底层数据库访问所存在的细节差异。

不同数据库及其对应的方言

列表如下: 
RDBMS 方言 
DB2 org.hibernate.dialect.DB2Dialect 
DB2 AS/400 org.hibernate.dialect.DB2400Dialect 
DB2 OS390 org.hibernate.dialect.DB2390Dialect 
PostgreSQL org.hibernate.dialect.PostgreSQLDialect 
MySQL org.hibernate.dialect.MySQLDialect 
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect 
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect 
Oracle (any version) org.hibernate.dialect.OracleDialect 
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect 
Sybase org.hibernate.dialect.SybaseDialect 
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect 
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect 
SAP DB org.hibernate.dialect.SAPDBDialect 
Informix org.hibernate.dialect.InformixDialect 
HypersonicSQL org.hibernate.dialect.HSQLDialect 
Ingres org.hibernate.dialect.IngresDialect 
Progress org.hibernate.dialect.ProgressDialect 
Mckoi SQL org.hibernate.dialect.MckoiDialect 
Interbase org.hibernate.dialect.InterbaseDialect 
Pointbase org.hibernate.dialect.PointbaseDialect 
FrontBase org.hibernate.dialect.FrontbaseDialect 
Firebird org.hibernate.dialect.FirebirdDialect 
附图: 

具体实现

在hibernate的配置文件persistence.xml中加入需要的方言即可。 
配置方法如下:

<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
  • 1

附图: 

参考材料

http://www.2cto.com/database/201402/281152.html

转载https://blog.csdn.net/qq_33429968/article/details/53536778

Hibernate中的方言相关推荐

  1. Hibernate中的数据库方言(Dialect)

    Hibernate中的数据库方言(Dialect) 在配置hibernate.cfg.xml时需指定使用数据库的方言: 例: <property name="dialect" ...

  2. hibernate 中id生成策略

    数据库的设计和操作中,我们通常会给表建立主键.  主键,可以分为自然主键和代理主键.  自然主键表示:采用具有业务逻辑含义的字段作为表的主键.比如在用户信息表中,采用用户的身份证号码作为主键.但是这样 ...

  3. 使用SQLQuery 在Hibernate中使用sql语句

    对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...

  4. Hibernate中SessionFactory配置

    SessionFactory配置 因为Hibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数.幸运的是,大部分都已经有默认值了,Hibernate发行包中还附带有示例的hiberna ...

  5. 什么事java中hql语句,hibernate中hql语句详解

    之前给大家讲了一下hibernate分页查询的内容,那么下面就要接着给大家对hibernate中hql语句方面的知识进行一下详细的讲解,一起来了解一下吧. 刚开始做项目的时候,项目当中的hql语句就是 ...

  6. hibernate中的hql查询语句list查询所有与iterate查询所有的区别

    hibernate中的hql查询语句list查询所有与iterate查询所有的区别 list查询所有: 01,会立即产生一条select语句1select查询出来的所有语句都会被session管理, ...

  7. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  8. Hibernate-ORM:05.Hibernate中的list()和iterator()

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- Hibernate中查多条(全部)使用list()或iterator() 本篇介绍: 1.如何使用list() ...

  9. 具体解释Hibernate中的事务

    1.前言 上一篇博客解说了Hibernate中的一级缓存,属于Session级别的.这篇博客解说一下Hibernate中的事务机制. 有关事务的概念.请參照通俗易懂数据库中的事务.  2.怎样处理Hi ...

最新文章

  1. CMake命令之list
  2. android卡点视频教程,剪映怎么制作卡点视频 制作方法介绍
  3. 接口超时后程序还会继续执行嘛_答网友问:分析一段STL程序,并就如何读懂一段程序谈几点感想...
  4. java aes密钥生成_如何在Java(Android)中生成与.Net中相同的AES密钥?
  5. 基于GRU和am-softmax的句子相似度模型 | 附代码实现
  6. linux手动生成dump文件权限不足_来玩一玩Linux常见命令~
  7. Python 爬虫利器 Beautiful Soup 4 之文档树的搜索
  8. 4.IDA-导航(跳转到地址、导航按钮、栈帧、调用约定、局部变量布局、IDA的栈视图)
  9. APICloud方法
  10. 腾讯2016校招试题----------格雷码的实现
  11. 工作中常用的linux命令,Linux工作中常用到的一些命令(持续更新)常用的
  12. FMEA-MSR 步骤五:风险分析(一)
  13. jdk32位安装包下载_天正T20V5.0软件安装包下载(建筑,给排水,结构,电气,暖通)+安装教程...
  14. Excel数据分析—制作客户画像
  15. C#使用selenium写爬虫提高速度的关键
  16. K.gather()
  17. NPN增量型编码器接线原理及测试
  18. python两个表格相同数据筛选_如何将多个表格中数据筛选汇总在一个表格里?
  19. js设置,获取,删除属性(setAttribute, getAttribute, removeAttribute)
  20. php编辑器_新PHP编辑器

热门文章

  1. vue3.2+ 滑动验证组件,pc/手机通用,即插即用
  2. wxml 点击图片下载_跟着做,零基础也能做出自己的小程序
  3. mvdbos php spider,Scrapy-Redis分布式爬取自如网(一)
  4. 2020-11-22 Vue-10组件化开发(1)
  5. 二手车交易价格预测 (数据分析)————task(2)
  6. 用指针实现将字符串2合并在字符串1后面
  7. 见证历史 -- 2013 NBA 热火夺冠之路有感
  8. 十堰一中2021高考 成绩查询,速看!十堰一中新高考攻略
  9. 什么是微分,微分如何将弯的掰直
  10. 国内程序员的Linux开发平台-Deepin