개발하는 자몽

[JPA] 임베디드 타입(@Embeddable, @Embedded)에 관하여 본문

Java/Spring

[JPA] 임베디드 타입(@Embeddable, @Embedded)에 관하여

jaamong 2024. 8. 23. 09:15

@Embeddable, @Embedded

  • `@Embeddable` 애노테이션이 있는 클래스는 기본 생성자가 필요함
  • 임베디드 타입은 값 타입에 속하는데, 이러한 값 타입은 여러 엔티티에서 공유하면 side effect를 일으킬 수 있다.
    • 따라서 불변 객체(Immutable Object)로 설정하여 이러한 문제를 방지하는 것이 좋다.
    • `@Embeddable` 클래스에 수정자(setter)를 생성하지 않고 생성자만 두어, 생성자로만 값을 설정하게 한다
      • 수정자가 없으므로 해당 임베디드 값 타입을 필드로 갖고 있는(@Embedded) 엔티티에서는 특정 값만 수정하는 것이 불가능. 객체를 새로 생성해야 함.

 

public static void main(String args[]) {

    Address address = new Address("city", "zipcode"); //임베디드 값 타입
    
    Member member = new Member(); // 멤버 엔티티
    member.setAddress(address);
    
    //만일 address의 city 값을 수정하고 싶다면 아래와 같이 해야함
    
    Address newAddress = new Address("newCity", "zipcode"); //새로운 객체
    member.setAddress(newAddress);
    
    //Address 클래스에는 수정자가 없고 생성자만 존재하므로, 특정 값만 수정하고 싶어도 위와 같이 새로운 객체를 생성해야 함

}

 

 

 

 

Comments