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

Spring Boot Entity加JSONObject字段触发resolve a type but got null报错

问题原因

JPA(默认Hibernate实现)没有内置JSONObject类型的映射规则,无法识别该非标准数据库字段类型,导致启动时类型解析失败。

解决方案

方案1:使用AttributeConverter自定义类型转换(推荐,兼容所有JPA 2.1+版本)

  1. 新增JSONObject和数据库字符串类型的转换器
import com.alibaba.fastjson.JSONObject;
import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;

// autoApply = true 表示所有JSONObject类型字段自动应用该转换器,也可以关闭后单独在字段指定
@Converter(autoApply = true)
public class JSONObjectConverter implements AttributeConverter<JSONObject, String> {
    // 实体转数据库存储值:将JSONObject序列化为JSON字符串
    @Override
    public String convertToDatabaseColumn(JSONObject attribute) {
        return attribute == null ? null : attribute.toJSONString();
    }

    // 数据库值转实体:将JSON字符串反序列化为JSONObject
    @Override
    public JSONObject convertToEntityAttribute(String dbData) {
        return dbData == null ? null : JSONObject.parseObject(dbData);
    }
}
  1. 调整实体类字段配置,指定对应转换器
@Convert(converter = JSONObjectConverter.class)
@Column(name = "childrenkoli_re", columnDefinition = "json")
private JSONObject childrenkoli;

*如果使用Jackson等其他JSON库,对应修改转换器内的序列化、反序列化逻辑即可,数据库字段建议设置为json/jsonb类型提升存储效率。

方案2:字段改用String类型存储,业务层手动转换

修改实体类字段为字符串类型,在需要使用JSON结构的业务代码中手动做序列化/反序列化:

// 实体类字段定义
@Column(name = "childrenkoli_re", columnDefinition = "json")
private String childrenkoliStr;

// 业务代码中转换示例
// 存值:JSONObject转字符串
inbound.setChildrenkoliStr(jsonObj.toJSONString());
// 取值:字符串转JSONObject
JSONObject childrenkoli = JSONObject.parseObject(inbound.getChildrenkoliStr());

方案3:Hibernate 6+版本使用内置JSON类型支持

如果使用Hibernate 6及以上版本,可以直接用内置的JsonType实现映射,无需自定义转换器:

import org.hibernate.annotations.Type;
import org.hibernate.type.JsonType;

@Column(name = "childrenkoli_re", columnDefinition = "json")
@Type(JsonType.class)
private JSONObject childrenkoli;

内容的提问来源于stack exchange,提问作者Adam Abdullah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:03