Programming/JPA(KYH)

JPA - 임베디드 타입

잇(IT) 2023. 7. 17. 15:01

- 임베디드 타입

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 프로그래밍 - 기본편)

728x90