You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:13:10