mysql引擎的原因,mysql主要使用两种引擎:myisam以及innodb
解决JPA自动生成的表为myisam引擎:
熟悉mysql的都知道,myisam引擎并不支持事务,只有innodb引擎才支持事务的处理。
myisam区别于innodb的一个明显不同是myisam不能创建外键,因此创建外键不能成功。
因为spring2.x版本之后的mysql版本spring-boot起步依赖的mysql版本一般高于mysql5.x.x版本,我用的是springboot2.1.7,mysql版本是8.0的
解决方案一:
关于hibernate.properties这个配置文件,是为了解决JPA自动生成表引擎为myisam的。
官方文档里发现,在新版的springboot里,形如MySQLInnoDBDialect已经被弃用了,使用新版的springboot中使用这种方式显然是做无用功
新增 hibernate.properties
hibernate.dialect.storage_engine=innodb
解决方案二:
1.从pom.xml中将mysql的依赖版本修改成5.x.x的版本
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
2.在application.properties中加入
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
MySQL5InnoDBDialect 中间的5InnoDB不能缺省 否则jpa还是会自动创建myisam引擎
但在springdatajpa没整合springboot时
<!--JPA的供应商适配器-->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="database" value="MYSQL" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
<property name="showSql" value="true" />
</bean>
</property>
这样的配置也有用,所以建议统一加上MySQL5InnoDBDialect