본문 바로가기
Dev/JPA

[JPA] 실습 - 값 타입 매핑

by dev_jsk 2021. 9. 2.
728x90
반응형

이전 실습에서 값 타입을 매핑해보자

요구사항

  • MemberAddress값 타입 추가
  • DeliveryAddress값 타입 추가

엔티티 설계

Member, Delivery 내 Address 값 타입 추가

실습

Entity

- Address.java

@Embeddable // 임베디드 타입 설정
public class Address {
@Column(length = 10) // 컬럼 사이즈
private String city;
@Column(length = 20)
private String street;
@Column(length = 5)
private String zipcode;
// 의미있는 메소드 구성 가능
public String fullAddress() {
return getCity() + " " + getStreet() + " " + getZipcode();
}
// getter, setter
// getter를 사용하여 equals를 구현해야 하는 이유
// getter를 사용하지 않을 경우 프록시 객체 비교 시 제대로 된 비교가 되지 않는다.
// getter를 호출해야 프록시 객체가 실제 객체에 접근하여 제대로 된 값을 가져오기 때문
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Address address = (Address) obj;
return Objects.equals(getCity(), address.getCity())
&& Objects.equals(getStreet(), address.getStreet())
&& Objects.equals(getZipcode(), address.getZipcode());
}
@Override
public int hashCode() {
return Objects.hash(getCity(), getStreet(), getZipcode());
}
}

- Member.java

@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
@Embedded // 임베디드 타입
private Address address;
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
// getter, setter
}

- Delivery.java

@Entity
public class Delivery {
@Id @GeneratedValue
private Long id;
private DeliveryStatus status;
@Embedded // 임베디드 타입
private Address address;
@OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY)
private Order order;
// getter, setter
}

동작 결과

Member와 Delivery 내 Address 정보 추가

728x90
반응형

댓글