使用hibernate自动创建Mysql表失败原因

1.使用 schemaExport(hibernate5.2.3)创建Mysql表

@Test
    public void testSchemaExport() {

        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
        Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
        SchemaExport schemaExport = new SchemaExport();
        schemaExport.create(EnumSet.of(TargetType.DATABASE), metadata);

    }

2.使用上面的代码可以生成SQL但是建表别没有成功;

Hibernate:
    create table User (
        id integer not null,
        age integer,
        name varchar(255),
        primary key (id)
    ) type=InnoDB

把hibernate生成的SQL语句在Navicat中执行出现错误;

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘Hibernate:
    create table User (
        id integer not null,
        age ‘ at line 1

3.经过查找发现是hibernate里的dialect和Mysql的版本不匹配,SQL语句里的type=InnoDB使用在MySQL5.0之前,5.0之后就要是使用engine=InnoDB

MySql5.0之前的配置

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

5.0之后需要使用

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

4.修改后的hibernate生成SQL语句如下,建表成功;

Hibernate:
    create table User (
        id integer not null,
        age integer,
        name varchar(255),
        primary key (id)
    ) ENGINE=InnoDB
时间: 2024-10-10 12:35:41

使用hibernate自动创建Mysql表失败原因的相关文章

hibernate自动创建表失败

今天在使用hibernate自动创建数据库表的时候,有一个表始终无法创建,但是其他的表都创建成功了.开始以为是spring没有扫描到该实体类,检查了配置文件后发现没有问题.后来用log4j把info信息打印出来发现创建该表的时候报错了.原来是字段里面有mysql的关键字(order)导致了创建失败. mysql关键字: ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CAL

SpringBoot+Mybatis 自动创建数据表(适用mysql)

Mybatis用了快两年了,在我手上的发展史大概是这样的 第一个阶段 利用Mybatis-Generator自动生成实体类.DAO接口和Mapping映射文件.那时候觉得这个特别好用,大概的过程是这样的 在数据库中先建好表配置好几个xml文件(一般都是复制粘贴上一个项目的),然后根据数据库中的表,生成实体类.DAO接口和Mapping映射文件当需要添加数据操作的时候,先在xml中写好CRUD语句,然后在DAO接口层写接口,最后到映射文件渐渐地,我忽然发现,这种方式越来越烦.改一个字段,要修改很多

雷林鹏分享:PHP 创建 MySQL 表

一个数据表有一个唯一名称,并有行和列组成. 使用 MySQLi 和 PDO 创建 MySQL 表 CREATE TABLE 语句用于创建 MySQL 表. 创建表前,我们需要使用 use myDB 来选择要操作的数据库: use myDB; 我们将创建一个名为 "MyGuests" 的表,有 5 个列: "id", "firstname", "lastname", "email" 和 "reg_d

hibernate动态创建数据库表名几种方式

数据库中数据量很大, 但又不可以删除时同时又要优化程序检索数据时间. 答:方式有很多比如 创建数据库表分区,创建索引, 存储过程等; 我这里采用动态创建数据库表的方式. 完全可以在不创建表分区情况下实行分表管理 例如 日志记录表 将日期(yyyy-MM)作为默认表后缀动态追加, 例如 文章发布表 将用户名作为后缀名进行动态追加 ; 动态创建数据库表的方式要具体问题具体分析, 比如JDBC中直接使用create table 表名_dynamicStr(...); 文章发布系统 dynamicStr

hibernate自动创建表报表不存在

在hibernate.cfg.xml配置了<property name="hibernate.hbm2ddl.auto">update</property>自动创建表,但是项目启动会报 table doesn't exists 可能原因是主键策略设置的是native 而类里的id类型是String 这个uid要换成Integer 原文地址:https://www.cnblogs.com/suni/p/8707538.html

hibernate自动创建表

配置自动创建表: <prop key="hibernate.hbm2ddl.auto">update</prop>//首次创建项目时用,项目稳定后一般注释 这里有是个值: update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失. create-d

Qt 数据库创建表失败原因之数据库关键字

本人数据库新手,在创建表时出现问题,最后经查证,找出问题所在.下面的程序是部分节选,在创建数据库表的时候,起先使用的L24的CreateDB,经测试,一直输出 Create testResult Fail, query->isActive()也为false,这就说明问题出在createDB上,也就是说这个QString应该是不符合要求才出错的.后来逐个测试,最后发现是 check varchar(100)的原因,经查看check是数据库关键字. 1 //创建数据库文件路径 2 testResul

Hibernate自动生成数据库表

在hibernate.cfg.xml中添加: 引用 <properties> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> value的值可选项如下: 引用 validate  加载hibernate时,验证创建数据库表结构 create  每次加载hibernate,重新创建数据库表结构. create-drop  加载hibern

hibernate 自动生成数据库表

只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update</property> update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失.