Spring Boot库存系统报错:not-null属性引用空值问题求助
问题原因分析
这个报错的核心是你在尝试持久化Item实体时,itemname字段的值为null,但该字段在实体类或数据库表中被配置了非空约束,导致JPA/Hibernate无法通过数据校验。
排查步骤及解决方案
1. 核对实体类Item的itemname约束配置
确认实体类中itemname字段的注解配置,是否明确了非空要求:
// 错误示例:仅数据库有非空约束但实体类未声明,或注解遗漏 @Column(name = "itemname") private String itemname; // 正确示例(业务要求非空时): @NotNull(message = "商品名称不能为空") @Column(name = "itemname", nullable = false) private String itemname;
同时要保证数据库表中itemname字段的非空约束和实体类注解一致,避免两边规则冲突。
2. 检查Controller层的参数接收逻辑
- 如果用
@RequestBody接收JSON,确认前端传入的JSON键名是否和itemname匹配(比如是否把itemname写成了itemName/item_name,可通过@JsonProperty指定映射关系) - 如果是表单提交,检查表单字段名是否和实体类
itemname字段完全一致,有没有拼写错误
3. 排查Service与Mapper层的数据处理
- 查看
ItemServiceIMPL的保存/更新逻辑,确认调用持久化方法(如repo.save())前,是否给itemname赋了有效值,有没有遗漏赋值的分支 - 若使用MyBatis的
ItemMapper,检查插入/更新的SQL语句,是否正确设置了itemname字段,有没有出现赋值为null的情况
4. 快速验证方法
在ItemServiceIMPL的保存方法中添加日志,直接打印待持久化的Item对象的itemname值,快速定位问题节点:
public StandardResponse saveItem(Item item) { System.out.println("待保存商品名称:" + item.getItemname()); // 打印日志验证 // 后续持久化逻辑 }
内容的提问来源于stack exchange,提问作者John Peter
相关产品推荐
相关产品推荐

