할만한 게 이제 address.
저거 한곳에 모아서 관리하기 괜찮아 보임.
근데 이미 하지 않았나..?
여튼 다시 해봄
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
}
getter, setter는 getter는 public, setter는 private
그러므로 생성자는 기본생성자에, 필드들 다 받는거.
또 그다음 equals() 오버라이드.
인텔리제이가 자동 생성 해 주는거.
근데 이거 할 때,
저거 getters 사용하라고 체크해주는 게 좋음.
저거 체크 안하면 this. 해서 이렇게 접근하는데, 그러면 프록시일경우 제대로 접근 못함.
프록시는 원본을 째로 가지고 있는거라서. getId()하면 원본.getId() 이런 식으로 호출하게 하는 거라서.
@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());
}
그럼 이렇게 get으로 짜줌.
또 이렇게 값타입으로 하면 좋은게,
@Embeddable
public class Address {
@Column(length = 10)
private String city;
@Column(length = 10)
private String street;
@Column(length = 10)
private String zipcode;
public Address(){
}
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
public String fullAddress(){
return getCity() + " " + getStreet() + " " + getZipcode();
}
}
저렇게 fullAddress() 처럼 의미있는 메소드를 만든다던가,
@Column하는 것 처럼 공통적으로 처리한다던가 할 수 있음.
얘 Member랑 Delivery에도 씀.
@Entity
public class Member extends BaseEntity{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="MEMBER_ID")
private Long id;
private String name;
@Embedded
private Address address;
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
}
@Entity
public class Delivery {
@Id @GeneratedValue
private Long id;
@Embedded
private Address address;
@Enumerated(EnumType.STRING)
private DeliveryStatus status;
@OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY)
private Order order;
}
여튼 그렇고, 다시 UML? 보면
저렇게 Value Type, 즉 값타입 해서 명시해 주면 좋음.
'JPA > JPA 기본' 카테고리의 다른 글
38. JPQL 기본 문법 (0) | 2023.10.30 |
---|---|
37. JPQL (0) | 2023.10.30 |
35. 값타입 컬렉션 (0) | 2023.10.29 |
34. 값타입 비교 (0) | 2023.10.29 |
33. 값타입과 불변 객체 (0) | 2023.10.29 |