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

SpringBoot查询全量产品返回500错误,新增产品已成功存入数据库

问题根因

你遇到的报错是JPA双向关联搭配Lombok @Data 注解引发的循环调用栈溢出,完全符合你描述的「数据成功入库但跳转页面时报错」的现象:

  • @Data 注解会自动为实体类生成 hashCode()、equals()、toString() 方法
  • Categories 和 Products 是双向一对多关联:分类实体包含关联产品集合,产品实体包含关联分类引用
  • 调用任意一方的hashCode/toString时,会自动调用关联对象的对应方法,形成死循环,最终触发StackOverflowError
  • 报错发生在跳转后渲染产品列表页的阶段,此时产品已经完成入库操作,和你观测到的现象一致

修复方案

1. 修正实体类注解,打破循环依赖

两个实体类不要直接使用@Data,改用组合注解,排除关联字段的hash/equals/toString逻辑:

Categories 实体修改:

@Entity
@Getter
@Setter
@ToString(exclude = "product_category") // 排除关联产品集合,避免toString循环
@EqualsAndHashCode(exclude = "product_category") // 排除关联字段,避免hash/equals循环
public class Categories {
    // 原有字段、构造方法、get/set保持不变
}

Products 实体修改:

@Entity
@Table(name = "Products")
@Getter
@Setter
@ToString(exclude = "product_category") // 排除关联分类对象
@EqualsAndHashCode(exclude = "product_category")
public class Products {
    // 原有字段、构造方法、get/set保持不变
}

2. 修复产品列表页的分类展示逻辑

你当前直接输出${product.product_category}会调用分类对象的toString,改成直接取分类名称字段即可:

<!-- 将products.html中原有的分类展示td替换为下面的代码 -->
<td th:text="${product.product_category.categoryName}" ></td>

3. 修复新增产品表单的分类绑定逻辑

你当前的分类下拉框只提交分类ID,SpringMVC无法自动转换为Categories对象,补充全局转换器即可:
首先修改create_product.html中的下拉框代码:

<select class="form-control form-control-sm" id="category" th:field="*{product_category}">
    <option value=""> Select Category </option>
    <option th:each = "category: ${category}"
            th:value="${category.categories_id}"
            th:text="${category.categoryName}">
    </option>
</select>

新增全局类型转换器,SpringBoot会自动注册生效:

@Component
public class CategoriesConverter implements Converter<String, Categories> {
    @Autowired
    private CategoriesRepository categoriesRepository;

    @Override
    public Categories convert(String source) {
        Long id = Long.valueOf(source);
        return categoriesRepository.findById(id).orElse(null);
    }
}

内容的提问来源于stack exchange,提问作者Hesham Eldawy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:39:01