본문 바로가기

Slack 채널 정리

JpaSystemException: No default constructor for entity

오늘 배운 거.
spring, jpa (spring-boot-starter-data-jpa) 로 코딩 중에 'JpaSystemException: No default constructor for entity' 발생.


1. 잘 돌던 다른 엔티티 클래스랑 비교해봤는데 lombok 을 이용하고 있다 보니 코딩 소스 자체로는 별 차이 없어 보였지만 실제 구조 확인하려고 클래스 스트럭쳐 창을 열어보니(IntelliJ 에서는 단축키 Alt + 7) 에러 메시지 그대로 디폴트 생성자가 안 만들어져 있네요.
2. 문제 원인 추적해보니 테스트 코드에서 값 생성 쉽게 하려고 문제된 엔티티 클래스에 lombok 의 @Builder 를 추가해준 것 때문에 그렇더군요. @Builder 애노테이션은 빌드 클래스를 자동으로 만들어주는데 이 과정에서 디폴트 생성자 대신 모든 필드값을 가지는 생성자만 생성해버리네요.
3. JPA 쓰려면 디폴트 생성자가 필요하므로 @Builder 를 함께 사용하려는 경우에는 @NoArgsConstructor 와 @AllArgsConstructor 를 추가해주는 방식으로 문제 해결할 수 있었습니다. 끝