最近在学习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 |