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才正确。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值