No Default Constructor For Entity 오류

poogie·2022년 1월 17일
0

.시작하기 전에

Spring Boot JPA Repository를 이용하여 로그인 api를 만들던 도중 오류에 직면했다.
제목과 같은 에러였는데 아래와 같다.

org.hibernate.InstantiationException: No default constructor for entity:  : com.jnjlabs.amiparure.user.User

기본생성자가 없다는 에러이다.
lombok의 Builder패턴을 사용하기위해 생성자는 만들어두지 않았는데 아무래도 JpaRepository를 사용하기 위에서는 기본 생성자가 꼭 필요한 모양이다.

빌더 어노테이션은 기본생성자와는 거리가 먼듯하니 빌더패턴을 적용하면서 기본생성자 오류를 해결할수 있는 방법을 찾아보자

.@AllArgsConstructor

모든 필드값을 파라미터에 넣은 기본생성자를 생성해주는 어노테이션이다.

하지만 빌더 패턴을 사용할것이기 때문에 생성자가 왠만하면 제기능을 할수없는 상태이길 바라기때문에 적합하지 않다.

.@NoArgsConstructor

다음은 파라미터가 없는 생성자를 만들어주는 어노테이션이다.
실제로 사용하지는 않을거지만 기본생성자가 필요한 상황이기에 적합하다고 판단해서 적용해보았다.

@Entity
@Getter
@Builder
@NoArgsConstructor
@Table(name = "user")
@DynamicInsert
public class User {
}

그런데 @Builder 어노테이션에서 오류가 발생했다.
빌더 어노테이션은 생성자를 생성하지 않으며 생성자 어노테이션과 같이 사용할 경우 빌더는 생성자이거나 메소드여야한다고 한다.

그래서 아래와같이 사용해보았다.

@Entity
@Getter
@NoArgsConstructor
@Table(name = "user")
@DynamicInsert
public class User {

    @Builder
    public User {
    
    }
    
}

다행이 빌더도 적용되고 파라미터가 없는 기본생성자도 생성되어 정상적으로 JpaRepository find가 동작되었다.

profile
불안한 개발자

0개의 댓글