hibernate的方言是什么??

2023-11-10 20:00
文章标签 hibernate 方言

本文主要是介绍hibernate的方言是什么??,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


转载之

http://blog.csdn.net/qq_33429968/article/details/53536778



前言

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

知识储备

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表

具体实现

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

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

附图: 
pro

property

参考材料

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

总结


这篇关于hibernate的方言是什么??的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/384930

相关文章

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

Hibernate插入数据时,报错:org.springframework.dao.DataIntegrityViolationException: could not insert: [cn.itc

在用junit测试:插入数据时,报一下错误: 错误原因: package junit;import org.junit.Test;import cn.itcast.crm.container.ServiceProvinder;import cn.itcast.crm.dao.ISysUserDao;import cn.itcast.crm.domain.SysRole;

Hibernate中自带的连接池!!!

<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"><?xml version="1.0" encoding="UTF-8"?></span> <span style="font-size:18px;"><!DOCTYPE hibernate-configuration PUBLIC"-//Hibern

spring mvc+hibernate 实现事务管理(全注解版)

为了方便项目变大配置文件变多,用注解代替 *.hbm.xml,<bean id="*dao" class="">,另外用反省实现dao操作,省去每个类一个dao,此处参考了鸵鸟的例子。 实现功能跟http://blog.csdn.net/waiwai4701/article/details/38270721这个项目是一样的,controller和页面就不再写 首先,jar包支持,为了方便

hibernate泛型Dao,让持久层简洁起来

【前言】hibernate作为持久层ORM技术,它对JDBC进行非常轻量级对象封装,使得我们可以随心所欲的使用面向对象的思想来操作数据库。同时,作为后台开发的支撑,的确扮演了一个举足轻重的角色,那么我们在项目中如何灵活应用hibernate,也会给项目维护以及项目开发带来便利,下面我将展示我们项目中是如何来对hibernate进行应用和操作。 【目录】              -

org.hibernate.transaction.JDBCTransaction cannot be cast to javax.transaction.Transaction

org.hibernate.transaction.JDBCTransaction cannot be cast to javax.transaction.Transaction 这部分的具体地方为Transaction tr =(Transaction) session.beginTransaction();  错误原因:包倒错了,应该导入的包是hibernate的Transaction包