Hibernate 自动建表 枚举字段类型的坑

应用环境:Spring Boot 3.4.3,Hibernate 6.6.8,数据库是MySQL

枚举类型字段增加注解:@Enumerated(EnumType.STRING)

在自动创建数据库时,会自动创建为枚举类型的字段

出现的问题:

如果同时在字段上添加了注解:@Column(length = 42),就是@Column注解增加了length参数,会导致每次启动都会更新这个字段,原因是Hibernate判断类型是否改变时会判断字段类型和字段长度,类型就是enum,长度是对比length和数据库获取到的长度,获取到的长度可能是枚举字段最长的那个。去掉length参数之后恢复正常。

但是,就算改变了枚举的元素,Hibernate也不会更新这个字段,因为Hibernate只匹配基础类型,不会匹配枚举元素

 

如果想自定义,可以继承MySQLDialect,通过Dialect的getTableMigrator方法返回自己的TableMigrator实现