Spring Boot/JPA

entity 기본 생성자 in jpa

최-코드 2024. 10. 11. 16:19

상황 : entitiy를 생성하고 기본 생성자 없이 애플리케이션을 실행했더니 에러가 발생했다.

 

원인 : lazy 로딩 전략을 사용할 때 해당 entity에 대한 proxy를 만든다. 이 때 기본 생성자를 통해 entitiy에 대한 객체를 만들고, proxy로 감싸기 때문에 기본 생성자는 꼭 만들어줘야 한다.

 

해결책 : entity에 기본 생성자를 만들어주면 된다.

 

추가) proxy 객체는 entity 객체를 상속하기 때문에 public 또는 protected 접근 제어자를 가진 기본 생성자가 필요하다.

public class User$HibernateProxy extends User {
    private LazyInitializer initializer;

    public User$HibernateProxy() {
        super();  // 부모(User)의 기본 생성자가 필요함
    }

    @Override
    public String getName() {
        // Lazy Loading: 실제 DB 조회 수행
        return initializer.load().getName();
    }
}