728x90
이 예제를 이해하기 위한 개념
https://un-lazy-midnight.tistory.com/102
https://un-lazy-midnight.tistory.com/103
https://un-lazy-midnight.tistory.com/104
지난 예제
https://un-lazy-midnight.tistory.com/105
지난 예제에 이어서 값 타입을 매핑해보자.
이번 예제에서는 Address 라는 값 타입을 사용하려고 한다.
기존 연관관계는 아래와 같다.
예제 코드는 다음과 같다.
Address를 값타입으로 사용하고 Member와 Delivery에 매핑한다.
Address.java
@Embeddable
public class Address {
//rule을 공통으로 쓸 수 있다. 예) 길이 설정
@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();
}
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
public String getCity() {
return city;
}
private void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
private void setStreet(String street) {
this.street = street;
}
public String getZipcode() {
return zipcode;
}
private void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Address address = (Address) o;
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
private Long id;
@Column(name="USERNAME")
private String name;
@Embedded
private Address address;
...
}
Delivery.java
@Entity
public class Delivery {
@Id @GeneratedValue
private Long id;
@Embedded
private Address address;
...
}
728x90
'💻dev > 🌱Java+Spring' 카테고리의 다른 글
JPA | JPQL 문법 뿌시기 - 기본 문법, 쿼리 API (0) | 2023.05.03 |
---|---|
JPA | 객체지향 쿼리 언어 간단 소개 (JPQL, Criteria, QueryDSL 등) (0) | 2023.05.02 |
JPA | 예제로 알아보는 영속성 전이 (예제 - 5) (0) | 2023.05.02 |
JPA | 값 타입 컬렉션이란? (저장, 조회, 수정 예제 및 주의사항) (0) | 2023.05.02 |
JPA | 값 타입은 변경이 가능할까? 불변 객체(immutable object)란? (+ 값 타입을 비교하는 방법) (0) | 2023.05.02 |