如何让Hibernate自动生成数据库EnumType枚举类型的表字段
Hibernate自动生成MySQL ENUM类型字段的解决方案
默认情况下@Enumerated(EnumType.STRING)仅会将枚举字段映射为varchar类型,要生成数据库原生的ENUM类型,需要通过@Column的columnDefinition属性手动指定字段定义:
修改后的实体类代码
@Entity public class DataHistory { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public long id; @Enumerated(EnumType.STRING) @Column( columnDefinition = "ENUM('INSERT','UPDATE','DELETE')", nullable = false ) public DatabaseTrigger action; } public enum DatabaseTrigger { INSERT, UPDATE, DELETE }
注意事项
- 需确认项目配置的Hibernate方言为MySQL对应版本的方言(如
MySQL8Dialect),否则可能无法正确识别ENUM语法 columnDefinition中枚举值的字符串必须和DatabaseTrigger枚举类中的枚举项完全一致,大小写匹配,避免数据写入时出现类型错误- 数据库原生ENUM类型属于强校验类型,后续如果要新增枚举值,需要同步修改
columnDefinition中的枚举列表,同时还要更新数据库表结构 - 如果项目需要兼容多种类型的数据库,更推荐使用默认的varchar类型存储枚举值,通用性更强
内容的提问来源于stack exchange,提问作者membersound
相关产品推荐
相关产品推荐

