Spring Boot库存管理系统报错:not-null属性引用空值/瞬态值
解决Hibernate PropertyValueException: itemname属性非空约束问题
常见原因及对应解决方案
1. 前端提交的itemname字段为空
- 检查前端请求体中是否包含
itemname参数,确保参数名和实体类属性名完全一致(注意大小写,比如实体类是itemname,前端别写成itemName)。 - 表单提交时确认输入框的
name属性和实体类属性匹配;JSON请求时检查JSON键名是否正确。
2. 实体类映射问题
- 打开
Item实体类,确认itemname字段的注解配置:- 若用JPA注解,确保
@Column(nullable = false)正确标记,且属性名拼写无误(别把itemname写成itemName)。 - 若用XML映射文件,确认对应字段设置了
not-null="true"。
- 若用JPA注解,确保
3. 业务层未正确赋值
- 检查
ItemServiceIMPL的创建方法,确保调用itemRepo.save()前,已给itemname属性赋值:// 错误示例:未设置itemname Item item = new Item(); // item.setItemname("xxx"); 缺失赋值代码 itemRepo.save(item); // 正确示例 Item item = new Item(); item.setItemname("测试商品"); // 确保属性名和实体类一致 itemRepo.save(item);
4. DTO到实体的映射遗漏
- 检查
ItemMapper的转换逻辑,确认从前端DTO转换为Item实体时,itemname字段被正确映射,没有遗漏赋值步骤。
5. 数据库字段约束不一致
- 查看数据库
item表的itemname字段,确认它被设置为非空(NOT NULL)。如果实体类标记了非空但数据库字段允许为空,或者反过来,都会触发异常。
快速排查步骤
- 在调用
itemRepo.save()前,打印Item对象的itemname值,确认是否为null。 - 查看请求日志,确认前端传入的参数是否包含有效的
itemname。 - 核对实体类、数据库表、DTO三者的字段名和非空约束是否统一。
内容的提问来源于stack exchange,提问作者John Peter
相关产品推荐
相关产品推荐

