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 를 붙여 생성자를 만들어주면 된다!

'Today I Run' 카테고리의 다른 글

[Springboot] @Transcational @Modifying  (0) 2024.05.09
[React] Portals, ref  (0) 2024.05.09
Websocket 맛보기  (1) 2024.05.09
[GoogleStudyJam] Introduction to Image Generation  (0) 2024.05.09
[GoogleStudyJam] Prompt Design in Vertex AI 실습  (1) 2024.05.09