如何解决使用@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
相关产品推荐
相关产品推荐

