Hibernate:创建Mysql InnoDB表而不是MyISAM

Dav*_*ker 47 java mysql innodb hibernate jpa

如何让Hibernate(使用JPA)创建MySQL InnoDB表(而不是MyISAM)?我发现使用Hibernate生成一个SQL文件来创建表时可以使用的解决方案,但没有任何"动态"工作.

Pas*_*ent 61

你不能指定Hibernate方言和使用

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
Run Code Online (Sandbox Code Playgroud)

编辑

从MySQL版本> 5.1应该是

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
Run Code Online (Sandbox Code Playgroud)

避免遇到此问题在MySQL中使用"TYPE = InnoDB"抛出异常

  • 请注意,此答案现已弃用.目前建议的方法是使用属性`hibernate.dialect.storage_engine = innodb`.见http://in.relation.to/2017/02/20/mysql-dialect-refactoring/ (18认同)

Aja*_*mar 25

转到此链接:

MySQL的方言,重构

它清楚地说:

传统上,MySQL使用非事务性MyISAM存储引擎,这是所有比MySQL55Dialect更早的方言的默认存储引擎.从MySQL55Dialect开始,默认情况下使用InnoDB存储引擎.

将以下内容放在application.properties中(或在您的配置中):

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
Run Code Online (Sandbox Code Playgroud)

上面的通知55. - 不只是5.

你也可以在控制台中看到它:

Hibernate: create table users_events (user_id bigint not null, event_id bigint not null) engine=InnoDB
Hibernate: create table users_roles (user_id bigint not null, role_id bigint not null) engine=InnoDB
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.


ska*_*man 13

您是否在休眠配置中指定了方言设置?如果没有,那么Hibernate将尝试自动检测数据库方言,并将选择最安全的MySQL dialec,即MySQL 4 MyISAM.

你可以通过将它添加到你的hibernate属性来给它一个特定的方言:

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
Run Code Online (Sandbox Code Playgroud)


Jul*_*les 7

从Hibernate 5.2.8开始,Mysql*InnoDBDialect不推荐使用其他答案使用的类。新的解决方案是设置以下属性:

hibernate.dialect.storage_engine = innodb
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参见http://in.relation.to/2017/02/20/mysql-dialect-refactoring/


Oli*_*ner 7

随着spring-boot 2.0.0M7以下为我工作(mysqld 5.7)

spring.jpa.hibernate.use-new-id-generator-mappings: true
spring.jpa.database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
Run Code Online (Sandbox Code Playgroud)


小智 5

对于较新的版本,您可以使用

hibernate.dialect.storage_engine=innodb
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
Run Code Online (Sandbox Code Playgroud)

hibernate.dialect的其他选项可以是MySQL55DialectMySQL57Dialect

以防万一 Spring Boot 2

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
Run Code Online (Sandbox Code Playgroud)