빌더와 생성자 어노테이션[Lombok]

스브코·2022년 3월 16일
0

스프링에서 @Builder 어노테이션을 사용할때 생성자 어노테이션없이 사용하면 아래와 같은 에러가 발생한다.

java:17: error: constructor User in class User cannot be applied to given types;
@Builder
^
  required: no arguments
  found: Long,String,String,String,List<Post>
  reason: actual and formal argument lists differ in length

일단 에러의 내용은 NoArgsConstructor 어노테이션이 없어서 빌더를 사용 할수 없다는 건데, 이유는 Lombok과 JPA의 관계 때문인것 같다.

JPA specification에 따르면 모든 entity클래스는 no-argument constructor가 있어야 하고 @Builder 를 @NoArgsConstructor와 사용하려면 빌더 패턴에서는 파라미터를 1개씩 가지는 각각의 생성자가 필요하기 때문에, 당연히 @AllArgusConstructor도 필요하게 된다.

결국 Spirng Data JPA 사용시 @Builder를 @Entity가 붙은 클래스에 사용하려면 @Builder, @NoArgsConstructor, @AllArgusConstructor 모두 세트로 붙여주어야 한다는 것이다.


참고 자료

https://prog.world/lombok-jpa-what-can-go-wrong/

https://yeon-kr.tistory.com/176

https://blog.leocat.kr/notes/2018/09/02/lombok-using-builder-and-noargsconstructor-together

profile
익히는 속도가 까먹는 속도를 추월하는 그날까지...

0개의 댓글