본 문서는 인프런의 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 (김영한) 강의를 공부하며 작성한 개인 노트입니다.
src/main/java/jpabook.jpashop/domain/Member
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
private String name;
private Address address;
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
}
src/main/java/jpabook.jpashop/domain/Member
@Embeddable
@Getter @Setter
public class Address {
private String city;
private String street;
private String zipcode;
}
src/main/java/jpabook.jpashop/domain/Order
@Entity
@Table(name = "orders")
@Getter @Setter
public class Order {
@Id @GeneratedValue
@Column(name = "order_id")
private Long id;
@ManyToOne
@JoinColumn(name = "member_id")
private Member member;
}
src/main/java/jpabook.jpashop/domain/Delivery
@Entity
@Getter @Setter
public class Delivery {
@Id @GeneratedValue
@Column(name = "delivery_id")
private Long id;
private Order order;
@Embedded
private Address address;
@Enumerated(EnumType.STRING)
private DeliveryStatus status;
}
이론적으로는 Getter & Setter 모두 제공하지 않는 것이 이상적임
Address 타입
1. 엔티티에는 Setter 사용하지 말자
2. 모든 연관관계는 자연로딩!
3. 컬렉션은 필드에서 초기화
4. 테이블/컬럼명 생성 전략
5. Cascade
6. 양방향 연관관계에는 컨트롤하는 클래스 쪽에 편의 메소드