在学习李刚的《轻量级Java2EE企业应用实战 第三版》时,调试第一个Hibernate程序,源代码是HibernateQs,
根据书本和源码敲上去,经常几次调试排除了代码写错的原因,可是最终还是出错,于是直接拿源码运行(做了一
些基本的必要修改如数据库密码什么的),可是还是出现同样的错误,提示找不到“news_table”表。由于初学,没有
Hibernate开发经验,复制错误提示上百度找一通,发现最多的解决方案是:
1. <property name="hbm2ddl.auto">create</property> 写错中间的“create”写错或“hbm2ddl.auto”写错
2.Mapping的映射文件写错
3.表中有关键字,比如 order, sql什么的
可是这些错误我都排除了,一天就花去了,很无奈。第二天,再来,于是把注意力放到hibernate.cfg.xml配置
文件中的dialect属性,这个叫数据库方言属性的东西一开始就引起我的兴趣和疑惑,因为用的是MySQL数据库,方
言选择里有:
MySQL :org.hibernate.dialect.MySQLDialect
MySQL with InnoDB :org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM: org.hibernate.dialect.MySQLMyISAMDialect
源码中用的是MySQLInnoDBDialect, 我就疑惑为什么选择这个,我本机的数据库这个引擎有开启呢?于是,我就
不管三七二十一,改用别的引擎试试运气,dialect属性改为org.hibernate.dialect.MySQLDialect,然后命令窗口ant run,
显示build successful,然后查看news_table,存在,查看插入的数据,也成功插入,哈哈,终于搞掂了。可是为什么呢?
是不是我没有开启InnoDB引擎呢?我百度了一下“mysql开启innodb”,我的my.ini文件配置是开启了:
default-storage-engine=INNODB,skip-innodb这行注释了,本来就是这样,证明InnoDB是默认开启的,于是再百度了下
“开启InnoDB 设置dialect MySQLInnoDBDialect 不能自动创建表”,终于找到了答案。是来自一个提问的:
http://www.iteye.com/problems/71889,里面有一名话“只是mysql5.5.15 不再支持type=InnoDB 的书写方式。所以当使用org.hibernate.dialect.MySQLInnoDBDialect建表时会报错”,我的是MySQL5.6,然后有人答复:“用MySQL5InnoDBDialect
替换 MySQLInnoDBDialect”,照着做,接着把dialect属性改回org.hibernate.dialect.MySQLInnoDBDialect,设置过别一个
新的表名(以验证是否能成功自动创建表)运行命令ant run,返回build successful,查询数据,插入成功,呵呵,问题解决!!!