hibernate输出语句但不建表的问题

分为三种情况:

1、hbm文件中定义的元素含有sql的关键字

例如: <property name="name"></property><property name="master"></property>

name 和 master都是mysql中的关键字


2、查看实体类中定义的get/set方法有么有类似boolean型的isPass()之类的构造方法,尽量避免。


 3.错误原因:你数据库版本或你数据库的存储引擎和你使用的方言对不上,数据库版本规定你需要使用type还是engine,而你数据库引擎则决定是Innodb还是MyISAM

修改方式很简单,你把数据库那三种方言配置都试一下就可以了,反正我是这么解决的。

最开始用的这种方言,结果不行:

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

运行结果如下:

Hibernate: 
    
    create table dog (
       dogid integer not null auto_increment,
        dogname varchar(255),
        dogcolor varchar(255),
        dogage integer,
        primary key (dogid)
    ) type=MyISAM//这里就是建表不成功的原因
type 和 引擎 和我数据库都不符合

然后是这种,结果还是不行:

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

运行后语句如下:

Hibernate: 
    
    create table dog (
       dogid integer not null auto_increment,
        dogname varchar(255),
        dogcolor varchar(255),
        dogage integer,
        primary key (dogid)
    ) type=InnoDB
org.hibernate.internal.SessionFactoryImpl@11acdc30
因为它的语句中使用的是type=InnoDB,type是早期mysql的语法了

最后是这种,终于可以了:

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

运行结果如下:

Hibernate: 
    
    create table dog (
       dogid integer not null auto_increment,
        dogname varchar(255),
        dogcolor varchar(255),
        dogage integer,
        primary key (dogid)
    ) engine=InnoDB
org.hibernate.internal.SessionFactoryImpl@759fad4
我数据库是最高版本的,并且存储引擎用的是 InnoDB,所以建表时engine = InnoDB才正确。


猜你喜欢

转载自blog.csdn.net/dimples_qian/article/details/80848355