Hibernate: 创建Mysql InnoDB表,而不是MyISAM。

26 浏览
0 Comments

Hibernate: 创建Mysql InnoDB表,而不是MyISAM。

如何让Hibernate(使用JPA)创建MySQL InnoDB表(而不是MyISAM)?我找到了一些解决方案,可以在使用Hibernate生成SQL文件来创建表时起作用,但没有找到可以实时生效的解决方案。

0
0 Comments

问题出现的原因是指定的Hibernate方言不正确,导致创建的MySQL表使用的是MyISAM引擎而不是InnoDB引擎。解决方法是将Hibernate方言修改为正确的InnoDB方言,可以通过以下几种方式实现:

1. 在配置文件中指定Hibernate方言为MySQL InnoDB方言:

hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

或者对于MySQL版本大于5.1的情况:

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

2. 使用属性`hibernate.dialect.storage_engine`指定存储引擎为InnoDB:

hibernate.dialect.storage_engine=innodb

3. 对于Spring Boot项目,可以在`application.properties`文件中添加以下属性:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect

或者对于MySQL版本大于5.1的情况:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

以上方法中的任意一种都可以解决Hibernate创建MySQL表时使用MyISAM引擎的问题。

0
0 Comments

问题的出现原因是在使用Hibernate时,默认情况下创建的MySQL表使用的是MyISAM存储引擎,而不是InnoDB存储引擎。这导致了数据的非事务性,可能会影响数据的一致性和完整性。

解决方法是将Hibernate的MySQL方言设置为MySQL55Dialect或更高的版本,以使用InnoDB存储引擎。可以在应用的配置文件(如application.properties)中添加以下配置:

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL55Dialect

这样配置后,创建的MySQL表将使用InnoDB存储引擎,从而实现了数据的事务性和一致性。在控制台输出中可以看到创建表时的引擎为InnoDB:

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

对于MariaDB,可以使用org.hibernate.dialect.MariaDB53Dialect方言。

希望这些信息对您有所帮助。

0
0 Comments

问题出现的原因是Hibernate在自动检测数据库方言时选择了最安全的MySQL 4 MyISAM方言。解决方法是在Hibernate配置中指定方言设置,可以通过添加以下代码到Hibernate属性中来指定方言:

hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

0