学习hibernate出现错误--之二(方言)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习hibernate出现错误--之二(方言)相关的知识,希望对你有一定的参考价值。

     最近在学习hibernate,其中关于错误的问题真是一头大,各种各样的奇葩错误层出不穷,简直是受不了了。
     用hibernate操作数据库,在使用hibernate进行把持久化类自动生成相关数据库表的时候,出现了一些问题。
     其中有上篇错误《hibernate学习错误--之一》,在上篇错误解决完成后,进行测试时通过了,没有报错,但是却没有生成表,控制台窗口显示一些找不到相关table的警告,找了半天也不知道错误出现再哪儿,查看配置文件感觉也没问题,配置文件上的一些基本信息,有些是原封不动的从以前一些其他的项目种拷贝过来的。
     
<property name="connection.url">
           jdbc:mysql://localhost:3306/hibernate_1
     </property>
     
     <property name="hbm2ddl.auto">update</property>
     <property name="dialect">
           org.hibernate.dialect.MySQLInnoDBDialect
     </property>
    
     <property name="show_sql">true</property>
     <property name="format_sql">true</property>
上面是以前的部分配置文件,其中标红的部分就是不能生成表的原因--方言的配置版本问题。
在网上找到一些资料,并附有一些关于方言版本的配置问题。
     方言的设定,是跟数据库的版本有关系的。
将上面配置文件的代码改成一下就没问题了:     
     <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
       
hibernate中的dialect即翻译过来的“方言”。
 
     因为hibernate是要将Java对象转换成数据库来描述的,而关系数据库实际上却有很多,各个不同的企业、公司、组织等开发了不同的数据库如Oracle、Mysql、SQL Server等等,这些数据库为了提高性能或增加提供一些额外的标准和语法,因此hibernate为了更好的适配各种关系数据库,针对每种数据库都指定了一个方言dialect。
     更简单直观的理解就是可以将dialect可以看作一个翻译器,不同的dialect可以将不同版本的数据库语言翻译成hibernate能统一理解的语言。
     我上面出现的错误就是方言的版本和所使用的数据库版本不适配。
 
以下是关于各个版本的数据库对应的方言:

数据库

方言(Dialect)

DB2

org.hibernate.dialect.DB2Dialect

DB2 AS/400

org.hibernate.dialect.DB2400Dialect

DB2 OS390

org.hibernate.dialect.DB2390Dialect

PostgreSQL

org.hibernate.dialect.PostgreSQLDialect

MySQL5

org.hibernate.dialect.MySQL5Dialect

MySQL5 with InnoDB

org.hibernate.dialect.MySQL5InnoDBDialect

MySQL with MyISAM

org.hibernate.dialect.MySQLMyISAMDialect

Oracle(any version)

org.hibernate.dialect.OracleDialect

Oracle 9i

org.hibernate.dialect.Oracle9iDialect

Oracle 10g

org.hibernate.dialect.Oracle10gDialect

Oracle 11g

org.hibernate.dialect.Oracle10gDialect

Sybase

org.hibernate.dialect.SybaseASE15Dialect

Sybase Anywhere

org.hibernate.dialect.SybaseAnywhereDialect

Microsoft SQL Server 2000

org.hibernate.dialect.SQLServerDialect

Microsoft SQL Server 2005

org.hibernate.dialect.SQLServer2005Dialect

Microsoft SQL Server 2008

org.hibernate.dialect.SQLServer2008Dialect

SAP DB

org.hibernate.dialect.SAPDBDialect

Informix

org.hibernate.dialect.InformixDialect

HypersonicSQL

org.hibernate.dialect.HSQLDialect

H2 Database

org.hibernate.dialect.H2Dialect

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出现错误--之二(方言)的主要内容,如果未能解决你的问题,请参考以下文章

休眠 - 方言已配置但仍然出现错误

hibernateHibernate SQL 方言(hibernate.dialect)

Hibernate不同数据库的连接及SQL方言

Grails 突然抛出错误无法确定数据库名称的 Hibernate 方言

MySQL8 的休眠方言

如何避免“无法确定数据库名称 [H2] 的 Hibernate 方言!”?