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

添加@NoArgsConstructor的Student实体调用双String参数构造报错如何解决?

问题产生原因

  • 你的Student类上显式添加了@NoArgsConstructor注解后,Lombok的@Data注解默认自带的@RequiredArgsConstructor功能会被覆盖失效,此时类中只会生成无参构造方法,没有接收firstName、lastName两个参数的构造方法,因此测试代码调用双参构造时会抛出参数匹配失败的错误。
  • JPA规范要求实体类必须提供公共无参构造方法用于反射实例化,所以你删掉@NoArgsConstructor注解后,JPA操作实体时会抛出异常,也就是你遇到的实体类异常问题。
  • 手动编写双参构造后,类中同时存在Lombok生成的无参构造和你手写的双参构造,同时满足了JPA和业务代码的调用需求,因此运行正常。

解决方法

你可以选择以下任意一种方案,同时满足JPA规范和业务构造需求:

  1. 添加@RequiredArgsConstructor注解
    直接在实体类上额外新增@RequiredArgsConstructor注解,Lombok会自动为所有被@NonNull修饰且没有设置默认值的字段生成对应参数的构造方法。你的firstName和lastName都添加了@NonNull注解,刚好会生成符合需求的双参构造,修改后的注解配置如下:
    @Entity
    @Table(name = "student")
    @Data
    @NoArgsConstructor
    @RequiredArgsConstructor
    public class Student {
        // 原有字段逻辑无需修改
    }
    
  2. 添加@AllArgsConstructor注解
    如果后续业务有需要传入所有字段(包括主键studentId)构造对象的场景,可以直接添加@AllArgsConstructor注解生成全参构造方法,这种方案灵活性更高,适合字段较多、构造场景复杂的实体类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:15:03