No property b found on entity class com.xxx.A to bind constructor parameter to

报错

org.springframework.data.mapping.MappingException: 
No property b found on entity class com.xxx.A to bind constructor parameter to!

代码

@Data
@SuperBuilder
public class A extends Base {
	private String a;
}
@Data
@SuperBuilder
public class Base {
	private String common;
}

分析

  • 1.查看 class文件
public class A extends Base {
    protected A(final A.ABuilder<?, ?> b) { // 发现 No property b 这个报错中的 b,推断构造函数有问题
        super(b);
    }

    public static A.ABuilder<?, ?> builder() {
        return new A.ABuilderImpl();
    }
...
  • 网上资料翻阅后找到关于 《@Builder和默认构造函数的冲突》,https://blog.csdn.net/weixin_43684257/article/details/117296134

解决

  • 添加 @NoArgsConstructor 和 @AllArgsConstructor
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class A extends Base {
	private String a;
}
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class Base {
	private String common;
}

特殊情況

  • 如果 B类 里面没有属性,只需要加 @NoArgsConstructor 即可,否则 build报错
@Data
@SuperBuilder
@NoArgsConstructor
public class B extends Base {

}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值