zoukankan      html  css  js  c++  java
  • Hibernate不能自动建表解决办法

    最近开始学Hibernate,看的是李刚的那本《轻量级java ee企业应用实战》。头一个hibernate程序,我原原本本的按照书上例子写下来,同时只是改动了些mysql的连接参数,并且在mysql中新建了一个hibernate数据库,仅此而已。然而预想不到的事情发生了……程序写好之后,运行,报错

           Hibernate: insert into news_table (title, content) values (?, ?)
           Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [org.crazyit.app.domain.News]

          …………此处省略
          Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hibernate.news_table' doesn't exist

          …………此处省略

           当时我就蛋疼了……情况是这样的,如果在mysql中把news_table表建好,然后运行成功,这说明连接肯定是没问题的。可就是不能自动建表,百度啊,遇到同样问题的人不少,按照他们所说的一个个去解决,可是还是没有效果。csdn上也发帖问了,有人说是:  <propertyname="hibernate.hbm2ddl.auto">update(create)</property>这个设置有问题,应该用update。好吧,我敢说我本来用的就是update,还是会出错。。有人说是什么mysql引擎不配对的缘故,好吧,我敢说<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>这样设置,在mysql的配置文件ini中什么引擎之类的也是innodb的(这个不太了解,随便说点),当时我想问题肯定也不在这。还有人说,可能是你持久类的字段设置成为关键字,这个更不靠谱了。。。。。

           后来我想也许是版本兼容问题,书上说的是用Hibernate3我用的是hibernate4。好吧我就重新下载hibernate3还是没用。。。。。。就这样,两天下来,什么各种方式都尝试了,还是报一样错

           最后实在没法了,看了下hibernate的视频教程,一步一步跟着做,每一个细节都不放过,尝试着hibernate.cfg.xml和**.hbm.xml的每一个配置。。。。。终于才被我发现了

    原来的配置如下:

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    <session-factory>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.password">liaobin1992</property>
      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
      <property name="hibernate.show_sql">true</property>
      <property name="hibernate.hbm2ddl.auto">update</property>
      <mapping resource="org/crazyit/app/domain/News.hbm.xml"/>       
    </session-factory>
    </hibernate-configuration>
    更改之后的配置:

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
    把这行换成:

    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

    这样就行了 ,然后整个世界都安静了。。

    (转载自:http://blog.csdn.net/biangren/article/details/8010018)

    另外发现标黄部分的3306默认端口号配不配置都可以。

    原因分析(2014年7月15日):

    mysql5.5.15 默认的引擎就是InnoDB,当然default-storage-engine=INNODB选项也是未注释的。只是mysql5.5.15 不再支持type=InnoDB 的书写方式。所以当使用org.hibernate.dialect.MySQLInnoDBDialect建表时会报错。

  • 相关阅读:
    AcWing 838. 堆排序
    AcWing 240. 食物链
    Sublime下载地址
    【转载】Java 8 Optional的正确姿势
    【SpringBoot】通过server.servlet.context-path设置应用的上下文路径
    【java/Lamda】List.stream().collect(Collectors.toMap(Emp::getId, a->a,(k1,k2)->k2))的意义
    Prometheus修改数据保留时间
    Atitit BLE 协议栈 艾提拉总结 目录 1. ——关于BLE的一些基本概念——
    Atitit 高并发设计实践 艾提拉著 目录 1. 并发的实现俩中模式 并发角度来看 基于事件触发vs线程的 1 2. 负载均衡 1 2.1. 云服务模型paas caas faas+http
    Atitit 锁的不同层级 app锁 vm锁 os锁 硬件锁 目录 1. 在硬件层面,CPU提供了原子操作、关中断、锁内存总线的机制 1 1.1. test and set指令 1 1.2. 锁内
  • 原文地址:https://www.cnblogs.com/mannixiang/p/3841850.html
Copyright © 2011-2022 走看看