PostgreSQL character(2)列在Spring/Hibernate中的类型定义方法
解决Hibernate枚举与PostgreSQL CHAR(2)列的类型匹配问题
问题核心是:Hibernate默认将EnumType.STRING类型的枚举映射为VARCHAR类型,但你的数据库列是固定长度的CHAR(2)(PostgreSQL中显示为bpchar),两者类型不匹配导致校验失败。仅设置length = 2无效,因为这个参数只是限定VARCHAR的长度,不会改变字段的基础类型。
直接解决方案:指定列的数据库原生类型
在@Column注解中通过columnDefinition明确指定数据库列类型为char(2),让Hibernate匹配数据库的字段类型:
@Enumerated(EnumType.STRING) @Column(columnDefinition = "char(2)", nullable = false) val language: AvailableLanguages,
原理说明
columnDefinition参数会直接告知Hibernate该字段对应的数据库原生类型,这样schema校验时就会识别到列类型是char(2),与PostgreSQL中的bpchar(固定长度字符类型)完全匹配,从而解决类型不兼容的报错。
如果项目中有多个枚举字段需要映射到CHAR类型,也可以自定义Hibernate类型来统一处理,但单一场景下使用columnDefinition是最直接高效的方式。
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

