[JPA] __**@AttributeOverride: 속성 재정의**__

  • 개념
    • @AttributeOverride
      • 임베디드 타입 내의 필드에 대한 매핑 정보를 오버라이드 할때 사용
      • 같은 임베디드 타입을 한 엔티티 내에서 여러 번 사용하고자 할 때 필요함
      • 같은 타입의 임베디드 필드가 테이블내에서 서로 다른 컬럼명을 가져야할 경우가 존재
  • 사례
    • 회원 엔티티 Member
    • 집 주소 homeAddress
    • 회사 주소 companyAddress
      • 집 주소 , 회사 주소는 모두 Address 타입입니다.
    • 데이터 베이스 테이블에 이를 매핑시 각 주소를 구분 O
    • 고유한 컬럼이 필요함
@Entity
public class Member {
    @Id @GeneratedValue
    private Long id;
    private String name;
    
    @Embedded 
    Address homeAddress;
    
    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name="city", column=@Column(name="COMPANY_CITY")),
        @AttributeOverride(name="street", column=@Column(name="COMPANY_STREET")),
        @AttributeOverride(name="zipcode", column=@Column(name="COMPANY_ZIPCODE"))
    })
    Address companyAddress;
}
CREATE TABLE MEMBER (
    id BIGINT PRIMARY KEY,
    name VARCHAR(255),
    city VARCHAR(255), -- homeAddress의 city
    street VARCHAR(255), -- homeAddress의 street
    zipcode VARCHAR(255), -- homeAddress의 zipcode
    COMPANY_CITY VARCHAR(255), -- companyAddress의 city
    COMPANY_STREET VARCHAR(255), -- companyAddress의 street
    COMPANY_ZIPCODE VARCHAR(255) -- companyAddress의 zipcode
);
  • 코드의 깔끔함을 유지하기위해 같은 임베디드 타입을 여러 번 사용하는 경우는 드물다.
  • 임베디드 타입 내부에 또 다른 임베디드 타입이 있는 경우에도, 해당 임베디드 타입을 포함하는 최상위 엔티티에 설정해야한다.

임베디드 타입과 null

  • 임베디드 타입이 null 이면 매핑한 컬럼 값은 모두 NULL 이 됨.

Uploaded by N2T

'자바 > JPA' 카테고리의 다른 글

[JPA] 컬렉션 페치 조인  (0) 2023.11.09
[JPA] 페치 조인과 일반 조인의 차이점  (0) 2023.11.09
[JPA] 값 타입- 기본값 타입  (0) 2023.11.06
[JPA] 값 타입- 임베디드 타입  (0) 2023.11.06
[JPA] 값 타입- 개요  (0) 2023.11.06