- 임베디드 타입
1. 새로운 값 타입을 직접 정의할 수 있다.
2. JPA는 임베디드 타입이라고 한다.
3. 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 한다.
4. int, String과 같은 값 타입을 사용한다.
- 임베디드 타입 사용법
1. @Embeddable: 값 타입을 정의하는 곳에 표시
2. @Embedded: 값 타입을 사용하는 곳에 표시
3. 기본 생성자 필수
- Member
@Entity
public class Member extends BaseEntity{
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
//기간 Period
@Embedded
private Period workPeriod;
//주소
@Embedded
private Address homeAddress;
- Member 엔티티에 Period, Address라는 새로운 타입을 생성한다.
- 임베디드 타입을 사용하기 위해선 @Embedded를 임베디드 타입 위에 작성해줘야 한다.
- Address
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
public Address() {
}
- 임베디드 타입을 적용한 Address 클래스를 작성한다.
- @Embeddable을 붙여준다.
- Period
@Embeddable
public class Period {
private LocalDateTime startDate;
private LocalDateTime endDate;
public Period() {
}
- 임베디드 타입을 적용한 Period 클래스를 작성한다.
- @Embeddable을 붙여준다.

- 임베디드 타입의 장점
1. 재사용
2. 높은 응집도
3. Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소 드를 만들 수 있다.
4. 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티 티에 생명주기를 의존한다.
- 임베디드 타입과 테이블 매핑

1. 임베디드 타입은 엔티티의 값일 뿐이다.
2. 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다.
- 임베디드 타입과 연관관계

- 임베디드 타입과 null
1. 임베디드 타입의 값이 null이면 매핑한 컬럼 값은 모두 null이다.
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "city", column = @Column(name = "WORK_CITY")),
@AttributeOverride(name = "street", column = @Column(name = "WORK_STREET")),
@AttributeOverride(name = "zipcode", column = @Column(name = "WORK_ZIPCODE"))})
private Address workAddress;
- 임베디드 참조값이 동일 할 경우 @AttributeOverrides를 통해 같은 클래스를 이용하여 새로운 컬럼을 생성하는 것이 가능하다.

- 임베디드 타입을 사용하여도 테이블 생성시 엔티티 필드를 통해 생성하는 것과 똑같이 생성되는 것을 확인 할 수 있다.
출처 : 인프런 - 우아한 형제들 기술이사 김영한의 스프링 완전 정복 (자바 ORM 표준 JPA 프로그래밍 - 기본편)
'Programming > JPA' 카테고리의 다른 글
JPA - 값 타입 컬렉션 (0) | 2023.07.17 |
---|---|
JPA - 값 타입과 불변 객체, 값 타입의 비교 (0) | 2023.07.17 |
JPA - 영속성 전이(CASCADE)와 고아 객체 (0) | 2023.07.17 |
JPA - 즉시 로딩, 지연 로딩 (0) | 2023.07.17 |
JPA - 프록시 (0) | 2023.07.17 |