728x90
반응형
이전 실습에서 값 타입을 매핑해보자
요구사항
Member
내Address
값 타입 추가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
}
동작 결과
728x90
반응형
'Dev > JPA' 카테고리의 다른 글
[JPA] 객체지향 쿼리 언어 - 기본문법 (2) (0) | 2021.09.08 |
---|---|
[JPA] 객체지향 쿼리 언어 - 기본 문법 (1) (0) | 2021.09.07 |
[JPA] 값 타입 (0) | 2021.09.01 |
[JPA] 실습 - 연관관계 관리 (0) | 2021.08.27 |
[JPA] 프록시와 연관관계 관리 (0) | 2021.08.27 |
댓글