0%

Lombok @Data, @Builder, @NoArgsConstructor注解实体类运行MyBatis报错

Java 程序中,我们使用 MyBatis ORM 框架和 MySQL 交互。MySQL 有个 user 表,所以在 Java 程序我们需要有个 User 类。

我给 User 类添加了 @Data@Builder 注解,结果在做 select 操作时报错了,MyBatis 应该是说需要一个无参构造器。

@Data 注解会默认生成 getter/setter,和无参构造方法,但是当我们添加了 @Builder 注解时,无参构造器就被删除掉了,所以报错了。

这时我们会想到那我再加一个 @NoArgsConstructor 注解行不行呢,实验后发现是不行的。

@NoArgsConstructor@Builder 会有冲突,导致编译出错。

可以添加一个无参构造方法并加上@Tolerate注解,如下:

1
2
3
4
5
6
7
8
@Data
@Builder
public class User {

@Tolerate
public User() {
}
}

或者,类似这种和MySQL表结构对应的Entity类,就不使用 @Builder 注解,需要User实例时,就 new 一个吧。