Spring jpa 中默认使用hibernate做ORM, hibernate会自动根据实体类建表. 这时如果你的表中有text,blob等字段的话经常会报下面这样的错误。
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
那么怎么在创建表时改ROW_FORMAT呢? 一种简单的办法就是重写MySQL5Dialect里的getTableTypeString 方法。
public class MySQL5CustomInnoDBDialect extends MySQL5Dialect{
public String getTableTypeString() {
return super.getTableTypeString() + " ROW_FORMAT=COMPRESSED";
}
}
当然, 别忘了在application.yml设置JPA使用你定义的Dialect。
jpa:
database: MYSQL # Specify the DBMS
properties:
hibernate:
dialect: com.wehealth.dtp.dao.MySQL5CustomInnoDBDialect



