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

保存数据时抛出java.sql.SQLException: Field 'name'无默认值的问题求助

解决Field 'name' doesn't have a default value数据库异常的方案

嘿,我刚帮你捋清楚这个问题的来龙去脉,咱们一步步搞定它~

先搞懂异常原因

这个SQL异常说白了就是:你要操作的数据库表中,name字段既没设置默认值,又是非空约束(NOT NULL),但你插入/更新这条数据时,name字段的值是null,数据库不知道该填啥,就报错了。

结合你的代码来看,问题大概率出在关联的Gender对象上:你通过genderServices.getById()获取Gender实例后,把它设置给了Category,但这个Gender对象的name属性是null,导致后续保存时触发了数据库的非空约束校验。

具体排查&修复步骤

1. 先确认查询到的Gender对象是否正常

在代码里加个简单的调试输出(或者用IDE debug),看看拿到的Gender的name是不是真的为空:

Gender gender = genderServices.getById(Integer.parseInt(carMap.get("gender").toString()));
// 加这行看看输出
System.out.println("查询到的Gender: ID=" + gender.getId() + ", Name=" + gender.getName());
category.setGender(gender);
// ... 其他代码

如果输出里Name是null,那就要检查:

  • 数据库中gender表对应ID的记录,name字段是不是真的空了?如果是,直接在数据库里补全数据就行。
  • 你的getById方法是不是用了投影查询(只查了id没查name)?如果是,修改查询逻辑,确保获取完整的Gender实体。

2. 检查Category类的关联注解是否带了不必要的级联

如果你的Category类里@ManyToOne注解加了级联操作(比如CascadeType.ALL),像这样:

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "gender_id")
private Gender gender;

那保存Category的时候,JPA会同步更新关联的Gender对象。如果此时Gender的name是null,就会触发数据库的非空报错。

这种情况直接把级联改成合适的类型(比如只级联更新MERGE),或者去掉级联(因为你是从数据库查的Gender,本来就是持久态,不需要级联操作):

@ManyToOne
@JoinColumn(name = "gender_id")
private Gender gender;

3. 加个前置校验避免踩坑

为了防止后续再出现类似问题,建议在保存前加个简单的校验逻辑:

String genderIdStr = carMap.get("gender").toString();
Integer genderId = Integer.parseInt(genderIdStr);
Gender gender = genderServices.getById(genderId);

// 校验Gender是否存在
if (gender == null) {
    throw new IllegalArgumentException("找不到ID为" + genderId + "的性别记录");
}
// 校验name是否为空
if (gender.getName() == null || gender.getName().trim().isEmpty()) {
    throw new IllegalArgumentException("ID为" + genderId + "的性别记录名称为空,请检查数据");
}

category.setGender(gender);
category.setCategoryName(carMap.get("categoryName").toString());
this.categoryServices.save(category);

额外小提示

如果实在不想改代码和数据,也可以给数据库gender表的name字段设置默认值(比如空字符串''),但这种方法不推荐,毕竟数据完整性才是关键~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:46:56