根据实体类为MySQL数据库自动创建表
运行时报错:
org.springframework.dao.InvalidDataAccessResourceUsageException:
error performing isolated work; SQL [n/a];
nested exception is org.hibernate.exception.SQLGrammarException:
error performing isolated work
....
Caused by: org.hibernate.exception.SQLGrammarException: error performing isolated work
....
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Table 'XXXX' doesn't exist
....
org.springframework.transaction.UnexpectedRollbackException:
Transaction silently rolled back because it has been marked as rollback-only
一种可能的原因:
applicationContext.xml
<!--JPA 的供应商适配器-->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- generateDdl 是否自动创建数据表
database 指定数据库类型
databasePlatform 数据库方言,支持数据库特有的语法
showSql 是否显示sql
-->
<property name="generateDdl" value="true"/>
<property name="database" value="MYSQL"/>
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
<property name="showSql" value="true"/>
</bean>
</property>
本机MySQL5.7,
在上面面配置中的 databasePlatform 属性的值 org.hibernate.dialect.MySQLDialect 不支持MySQL5.7
MySQL5.7以上的版本应该使用 org.hibernate.dialect.MySQL57Dialect 或者 org.hibernate.dialect.MySQL5Dialect
同理MySQL8.0 以上版本应该使用 org.hibernate.dialect.MySQL8Dialect
扩展:
继承关系从上到下为:
ConversionContext 接口
-->Dialect 抽象类
--> MySQLDialect 继承类
--> MySQL5Dialect 继承类
--> MySQL55Dialect 继承类
--> MySQL57Dialect 继承类
--> MySQL8Dialect 继承类