-
环境介绍
数据库:mysql8.0
JPA版本:3.3.2
springboot:3.3.2
-
发现问题
项目使用JPA(Hibernate)自动创建表,每次重启都会出现alter table 表名 modify column 字段名 mediumtext comment xxx的问题,如下图:
带着疑问我们翻看下源码追踪下hibernate的源码是如何产生的和怎么来解决这个问题,
-
定位问题
根据日志打印的位置,我们定位到了在org.hibernate.tool.schema.internal.StandardTableMigrator这个类里面的sqlAlterStrings方法,里面调用了判断类型和判断字段长度是否一致的方法,分别是hasMatchingType和hasMatchingLength,通过debug发现,hasMatchingLength在数据库类型为mediumtext的时候返回的并不是我们在注解上面的数值,因此问题就在这边了。