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 프로그래밍
Author And Source
이 문제에 관하여(33. 실전 예제(값 타입 매핑)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jsj3282/33.-실전-예제값-타입-매핑저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)