@NoArgsConstructor 애노테이션 accesslevel 설정과 관련된 에러

dev_archive_v·2024년 6월 3일

스프링 부트

목록 보기
4/22
jakarta.servlet.ServletException: Request processing failed: org.springframework.orm.jpa.JpaSystemException: No default constructor for entity 

원인을 찾아보니
domain에 작성한 엔티티에서 설정을 잘못작성하였다.
올바른 애너테이션작성은

@NoArgsConstructor(access = AccessLevel.PROTECTED)

이다.

잘못된 코드는

@NoArgsConstructor(access = AccessLevel.NONE)

이다.

우선 @NoArgsConstructor 은 객체의 기본생성자를 자동생성해주는 애노테이션이다.

accessLevel에는 4가지 종류가 있다.
PUBLIC, PROTECTED, PRIVATE, NONE이 있다.
왜 NONE으로 작성했을 때는 No default constructor가 발생하였을까?

관련 자료를 찾아보니
1. public : 무분별한 객체 생성
2. private:프록시 객체 생성 불가능
3. protected: 같은 패키지나 자식 클래스에서 사용할 수 있다 -> 무분별한 객체 생성에서 보호하는 것

만약 나와 같이 none으로 생성하면 public과 동일하게 되므로 컨트롤러 테스트시 오류가 난 것이다.
lombok을 사용할 때는 애노테이션이 어떤 역할을 하고 동작하는지 잘 알아야 할 것같다.

0개의 댓글