Spring Boot JPA Repository를 이용하여 로그인 api를 만들던 도중 오류에 직면했다.
제목과 같은 에러였는데 아래와 같다.
org.hibernate.InstantiationException: No default constructor for entity: : com.jnjlabs.amiparure.user.User
기본생성자가 없다는 에러이다.
lombok의 Builder패턴을 사용하기위해 생성자는 만들어두지 않았는데 아무래도 JpaRepository를 사용하기 위에서는 기본 생성자가 꼭 필요한 모양이다.
빌더 어노테이션은 기본생성자와는 거리가 먼듯하니 빌더패턴을 적용하면서 기본생성자 오류를 해결할수 있는 방법을 찾아보자
모든 필드값을 파라미터에 넣은 기본생성자를 생성해주는 어노테이션이다.
하지만 빌더 패턴을 사용할것이기 때문에 생성자가 왠만하면 제기능을 할수없는 상태이길 바라기때문에 적합하지 않다.
다음은 파라미터가 없는 생성자를 만들어주는 어노테이션이다.
실제로 사용하지는 않을거지만 기본생성자가 필요한 상황이기에 적합하다고 판단해서 적용해보았다.
@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가 동작되었다.