Spring MVC中EmployeeDetailController表单提交404无法写入数据库问题
问题根因排查结果
1. 核心问题:EmployeeDetail实体类缺失无参构造函数
Spring MVC通过@ModelAttribute绑定表单数据到实体类时,必须调用实体类的无参构造函数先实例化对象。你当前只自定义了有参构造函数,Java不会默认生成无参构造,导致Spring无法实例化EmployeeDetail对象,参数绑定失败,请求无法匹配到对应的PostMapping接口,最终返回404错误。这也对应了你观察到的「EmployeeDetail有参构造从未被调用」的现象。
2. 次要隐患:employee_detail表主键未赋值
你的employee_detail表主键employee_detail_id是关联employee表的外键,没有设置自增属性。如果提交表单时没有主动给EmployeeDetail的主键属性赋值,即使解决了构造函数问题,写入数据库时也会抛出主键非空约束异常。
解决方案
第一步:给EmployeeDetail实体类添加无参构造函数
public EmployeeDetail() { }
如果使用Lombok,可以直接加@NoArgsConstructor注解简化代码。
第二步:补充主键赋值逻辑
新增EmployeeDetail时,需要先选择关联的已有Employee,将Employee的id赋值给EmployeeDetail的主键属性后再存入数据库,或者调整实体类的关联配置,通过OneToOne注解自动关联维护外键值。
内容的提问来源于stack exchange,提问作者Stefan Jankovic
相关产品推荐
相关产品推荐

