一光年

[Spring-JPA] @Builder注解,发生No default constructor for entity异常

2019.06.18

在使用JPA的findAll方法时,会将一个Example对象传入。在加入lombok的@Builder注解后,传入的Example会导致一个异常发生。

No default constructor for entity

原因在于@Builder注解将该Entity实现为了Builder模式,且重写该Entity的constructor,保留传入全部入参的constructor。所以在JPA的查询中,通过反射newInstance()一个Example对象时,会发现找不到默认构造方法。

解决的办法很简单,在Entity的注解最下面再加上一个@NoArgsConstructor来添加一个无参数的构造方法。

@Builder
@Data
@Entity
@NoArgsConstructor  // 添加一个默认构造方法的注解
public class User {

  private String name;

  private String username;
}