순간을 성실히, 화려함보단 꾸준함을

[JPA]Should have [public, protected] no-arg constructor?? 본문

나의 개발 메모장

[JPA]Should have [public, protected] no-arg constructor??

폭발토끼 2021. 12. 22. 00:51

JPA 를 사용하다보면 가끔 기본적인 개념조차 암기하지 않고 난방하는 경우가 생기는데 절대 이러지 말자!!

중요한건 기본기!!

제목과 같은 오류 메세지를 가끔 확인할 수 있는데 저 오류 메세지의 원인은 간단하다.

@Entity,@Embeddable 어노테이션을 사용하면 이 클래스는 테이블과 매핑할 클래스라는 것을 명시해준다.

이때 반드시 기본 생성자(no-arg constructor) 가 필수적이다.

그러니 @NoArgsConstructor 어노테이션을 붙여주던가 아니면 기본생성자를 입력해주자.

@Embeddable
@NoArgsConstructor    //첫번째 방법
public class Address {

    private String city;

    private String street;

    private String zipcode;

    //public Address(){}    //두번째 방법

    public Address(String city, String street, String zipcode) {
        this.city = city;
        this.street = street;
        this.zipcode = zipcode;
    }
}

그러면 @RequiredArgsConstructor@AllArgsConstructor 어노테이션은 사용하면 안되겠네용?!
결론부터 말하면 사용해도 된다. 다만 주의할 점이 있는데

@AllArgsConstructor 어노테이션을 사용할때는 모든 필드값에 대한 생성자를 생성해주는 것이니 @NoArgsConstructor 를 같이 붙여줘야 한다.
@RequiredArgsConstructor 어노테이션을 사용할 때도 마찬가지인데 이때 만약 필드값이 final 키워드가 붙지 않는 클래스라면 @NoArgsConstructor 를 붙여주지 않는다고 할지라도 자동으로 기본생성자가 생성이 된다.

@Embeddable
@RequiredArgsConstructor
public class Address {

    private String city;

    private String street;

    private String zipcode;
}