初学Hibernate, 遇到不能自动创建表的问题

在学习李刚的《轻量级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,查询数据,插入成功,呵呵,问题解决!!!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值