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

如何解决使用@One外键映射时抛出的org.mybatis.spring.MyBatisSystemException异常

MyBatis @One关联映射实例化异常解决方案

异常说明

使用@One注解实现两张表外键关联映射时,MyBatis抛出如下异常:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class com....XXX

实体类已添加Lombok的@Getter、@Setter、@Builder注解。

根因分析

Lombok的@Builder注解默认会为实体类生成全参构造方法,同时会覆盖类默认的无参构造方法,且不会主动生成无参构造。MyBatis在通过反射机制实例化返回结果对应的实体对象时,必须依赖无参构造方法,缺少无参构造就会触发上述反射异常。

修复方案

  • 方案1(推荐):在实体类上额外添加@NoArgsConstructor和@AllArgsConstructor注解
    示例代码:
    @Getter
    @Setter
    @Builder
    @NoArgsConstructor // 生成MyBatis所需的无参构造
    @AllArgsConstructor // 补全@Builder依赖的全参构造,保证Builder功能正常可用
    public class XXX {
        // 类属性定义
    }
    
  • 方案2:若业务中不需要使用Builder构建对象,直接移除实体类上的@Builder注解即可,类会默认保留无参构造方法。
  • 方案3(适配高版本Lombok):Lombok 1.18.14及以上版本可将@Builder修改为@Builder(toBuilder = true),同时搭配@NoArgsConstructor注解,也可解决构造方法冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 23:24:03