임베디드 타입, @Embeddable, @Embedded

2021. 1. 21. 15:15JPA/JPA

임베디드 타입

  • 새로운 값 타입을 직접 정의해서 만든 값타입.
  • 여러가지 값타입을 모아서 만들 수 있음.
  • 임베디드 타입을 사용하기 전과 후에 매핑되는 테이블은 변하는게 없다.

임베디드 타입 사용법

  • @Embeddable: 값 타입을 정의하는 곳에 표시
  • @Embedded: 값 타입을 사용하는 곳에 표시
  • 기본 생성자 필수
  • 한 엔티티에서 같은 값 타입을 사용할 경우 컬럼명이 중복되는것을 피하기 위해  @AttributeOverrides, @AttributeOverride를 사용해서 컬러 명 속성을 재정의
  • 임베디드 타입의 값이 null이면 매핑한 컬럼 값은 모두 null
  • 임베디드 타입은 객체 타입이기 때문에 = 연산자를 사용할 경우 공유 참조가 된다.
  • 따라서 불변 객체로 설계하여 사용해야한다. (생성자로만 값을 세팅하고 setter를 만들지 않으면 된다.)
  • 값타입의 비교를 위해 equals 메소드를 재정의 해서 사용한다.

임베디드 타입의 장점

  • 재사용
  • 높은 응집도
  • 해당 값타입만 사용하는 의미있는 메소드를 만들 수 있음
  • 값 타입을 소유한 엔티티의 생명주기에 의존할 수 있음