Spring Boot+Hibernate操作Nft实体时sell_status列Data Too Long报错如何解决
错误原因
- Java实体类中
sellStatus的boolean类型与数据库sell_status字段类型不匹配:当前数据库sell_status字段大概率为bit(1)类型,仅支持存储0/1二进制位值,而Hibernate默认会将Java boolean值序列化为字符串格式的'0'/'1'或'true'/'false'写入,字符串长度超出了bit(1)字段的存储限制,因此抛出长度溢出错误。 - 未给
sellStatus字段显式指定Hibernate的映射规则,导致默认序列化规则和数据库字段类型不兼容。
解决方案
根据你的业务场景选择以下任意一种方案即可:
方案1:统一使用
tinyint(1)存储布尔值
首先修改数据库字段类型:ALTER TABLE nft MODIFY COLUMN sell_status TINYINT(1) DEFAULT 0 COMMENT '售卖状态 0未售卖 1已售卖';然后给实体类字段添加列定义注解:
@Column(columnDefinition = "TINYINT(1)") private boolean sellStatus;方案2:适配现有
bit(1)类型的数据库字段
给实体类字段添加Hibernate类型注解,指定布尔类型转换器:@Type(type = "org.hibernate.type.BooleanType") private boolean sellStatus;方案3:使用字符串存储状态
若业务后续需要扩展更多状态值,可直接修改字段类型为字符串:
实体类修改:private String sellStatus;数据库字段调整:
ALTER TABLE nft MODIFY COLUMN sell_status VARCHAR(10) DEFAULT 'false' COMMENT '售卖状态';
内容的提问来源于stack exchange,提问作者Emre Varol
相关产品推荐
相关产品推荐

