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 |
댓글