应用环境: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实现