Spring JPA操作PostgreSQL存储枚举报错:Bad value for type byte
问题原因
Hibernate默认会把Java枚举类型映射为序数(ordinal)——也就是枚举在类里的顺序索引(比如WRAP是0、PROTEIN是1这类数字),但你的PostgreSQL表中type列是VARCHAR(10)类型,存储的是枚举的名称字符串(比如WRAP)。两者类型不匹配,导致读取数据时Hibernate试图把字符串WRAP转成字节类型,直接抛出了类型转换错误。
解决方案
最直接的修复方式是给枚举字段加上@Enumerated(EnumType.STRING)注解,明确告诉Hibernate按字符串来映射枚举:
修改Ingredient实体类的type字段:
@Id private final String id; private final String name; @Enumerated(EnumType.STRING) // 新增该注解 private final Type type;
额外注意
如果之前数据库中已经存入了错误格式的数据(比如存了序数数字),需要先清理这些数据,避免读取旧数据时仍然报错。修改完成后重启应用,初始化代码会把WRAP这类枚举名称以字符串形式存入type列,后续读写就能正常匹配了。
内容的提问来源于stack exchange,提问作者bannnnn
相关产品推荐
相关产品推荐

