33. 실전 예제(값 타입 매핑)

33. 실전 예제(값 타입 매핑)

아래 예제의 Member, Delivery에는 주소 정보가 나열되어 있다.

  • 값 타입 적용 전
public class Member {
    ...
    private String city;
    private String street;
    private String zipcode;
    ...
}

public class Delivery {
    ...
    private String city;
    private String street;
    private String zipcode;
    ...
}

아래 예제처럼 Address라는 값 타입을 만들어서 나열된 주소 대신에 사용하도록 변경해보자. 아래 그림은 값 타입을 사용한 결과 UML이다.

  • 값 타입 주소(Address)
package jpabook.model.entity;

import javax.persistence.Embeddable;

@Embeddable
public class Address {

    private String city;
    private String street;
    private String zipcode;
    
    // Getter, Setter
    // Equals, hashCode
    ...
}
  • 회원(Member)에 값 타입 적용

package jpabook.model.entity;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
public class Member {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    private String name;
    
    // private String city;          // 삭제
    // private String street;        // 삭제
    // private String zipcode;       // 삭제

    @Embedded                        // 추가
    private Address address;         // 추가

    @OneToMany(mappedBy = "member")
    private List<Order> orders = new ArrayList<Order>();
    ...
}
  • 배송(Delivery)에 값 타입 적용
package jpabook.model.entity;


import javax.persistence.*;

@Entity
public class Delivery {

    @Id @GeneratedValue
    @Column(name = "DELIVERY_ID")
    private Long id;

    @OneToOne(mappedBy = "delivery")
    private Order order;
    
    // private String city;          // 삭제
    // private String street;        // 삭제
    // private String zipcode;       // 삭제

    @Embedded                        // 추가
    private Address address;         // 추가

    @Enumerated(EnumType.STRING)
    private DeliveryStatus status; //ENUM [READY(준비), COMP(배송)]
    ...
}

위의 예제(값 타입 주소(Address))의 Address 값 타입을 만들고 이것을 위의 예제(회원(Member)에 값 타입 적용)와 위의 예제(배송(Delivery)에 값 타입 적용)의 Delivery 엔티티에 적용했다. 이제 주소 정보에 필드나 로직이 추가되면 Address 값 타입만 변경하면 된다.

참고

  • 자바 ORM 표준 JPA 프로그래밍

좋은 웹페이지 즐겨찾기