Today I Run

[SpringBoot] 왜 Entity는 기본생성자가 필요한가요?

조핑구 2024. 5. 9. 10:39
nested exception is org.hibernate.InstantiationException: No default constructor for entity

이런 에러를 만나고 궁금증이 들었다

왜 Entity는 기본 생성자가 필요할까?

JPA는 자바에서 제공하는 reflection API를 활용해 동적으로 객체를 생성한다. JVM이 실행되면 코드가 static 영역에 저장되는데 reflection API는 그 정보를 활용해 구체적인 클래스 타입을 몰라도 클래스 이름을 통해 static 영역에서 그 클래스의 정보에 접근할 수 있게 해준다. 하지만 생성자의 인자정보는 가져올 수 없기때문에 기본생성자가 있어야 객체를 생성할 수 있다.

@Builder로 빌드클래스를 만드는데 이 과정에서 기본 생성자 대신 모든 필드값을 가지는 생성자만 생성한다. 따라서 Entity 클래스 위에 @AllArgsConstructor  @NoArgsConstructor 를 붙여 생성자를 만들어주면 된다!