- 개념
@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 |