学习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

时间: 2024-12-31 02:09:19

学习hibernate出现错误--之二(方言)的相关文章

学习hibernate出现的错误--之一(映射对应)

初学习遇见不少关于hibernate的错误,将这些错误一一记录下来. java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.r

一步步学习Hibernate框架(四):采用jpa实现一对多关联映射(二)

上篇博客已经采用jpa注解来实现了一对多关联映射,将这种关联映射以外键的形式处理,现在来看看怎么以第三张表的形式处理.采用jpa注解来映射数据库要使用的jar包见上篇博客: 一步步学习Hibernate框架(三):采用jpa实现一对多关联映射(一) 现在看第二种方式:以第三张表的关系来体现 Group.java package com.tgb.zhudan; import java.util.List; import javax.persistence.CascadeType; import j

【python标准库学习】thread,threading(二)多线程同步

继上一篇介绍了python的多线程和基本用法.也说到了python中多线程中的同步锁,这篇就来看看python中的多线程同步问题. 有时候很多个线程同时对一个资源进行修改,这个时候就容易发生错误,看看这个最简单的程序: import thread, time count = 0 def addCount(): global count for i in range(100000): count += 1 for i in range(10): thread.start_new_thread(ad

Rhythmk 学习 Hibernate 03 - Hibernate 之 延时加载 以及 ID 生成策略

Hibernate 加载数据 有get,跟Load 1.懒加载: 使用session.load(type,id)获取对象,并不读取数据库,只有在使用返回对象值才正真去查询数据库. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Test    public void  test1()    {        Session session = null;         try {             session = Hiber

hibernate复习第(二)天

今日要点: 关联映射 多对一(Employee - Department) 一对多(Department - Employee) 一对一(Person - IdCard) 多对多(teachet - student) 组件映射(User - Name) 集合映射(set,list,map,bag) inverse和cascade(Employee - Department) 多对一: <many-to-one name="depart" column="depart_i

capwap学习笔记&mdash;&mdash;初识capwap(二)

2.5.1 AC发现机制 WTP使用AC发现机制来得知哪些AC是可用的,决定最佳的AC来建立CAPWAP连接. WTP的发现过程是可选的.如果在WTP上静态配置了AC,那么WTP并不需要完成AC的发现过程. WTP首先发送一个 Discovery Request message给受限的广播地址,或者CAPWAP的多播地址(224.0.1.140),或者是预配置的AC的单播地址.在IPV6网络中,由于广播并不存在,因此使用"All ACs multicast address" (FF0X

【Linux】鸟哥的Linux私房菜基础学习篇整理(十二)

1. depmod [-Ane]:更新内核模块依赖.参数:无参数:depmod会主动分析目前内核的模块,并重新写入/lib/modules/$(uname -r)/modules.dep中:-A:depmod会查找比modules.dep内还要新的模块,如果找到符合模块才更新:-n:不写modules.dep,而将结果输出到屏幕:-e:显示目前已加载的不可执行的模块名称. 2. lsmod:查看内核目前加载的模块. 3. modinfo [-adln] [module_name|filename

【WPF学习】第三十二章 执行命令

原文:[WPF学习]第三十二章 执行命令 前面章节已经对命令进行了深入分析,分析了基类和接口以及WPF提供的命令库.但尚未例举任何使用这些命令的例子. 如前所述,RoutedUICommand类没有任何硬编码的功能,而是只表达命令,为触发命令,需要有命令源(也可使用代码).为响应命令,需要有命令绑定,命令绑定将执行转发给普遍的事件处理程序. 一.命令源 命令库中的命令始终可用.触发他们的最简单的方法是将它们关联到实现了ICommandSource接口的控件,其中包括继承自ButtonBase类的

学习hibernate笔记

以前学习java的时候,一开始就学习了hibernate,那时候总觉得ssh非常高大上,所以就急忙看了下相关视频.不过因为实际需要不高,所以后来一直没有使用上hibernate组件.现在一年过去了,也疯狂学习了java一段时间了,做过几个不大的项目,但是总算对java有些了解.现在参加了工作,公司使用的就是ssh,所以这两天又重新开始捣鼓hibernate.这次学习直接使用editplus,直接开发.看了官网的demo,发现英语也没有想象中那么困难.哈哈,把自己的学习记录下来吧.这里主要记录三个