<배운 것>
@OneToOne : 일대일 매핑
@OneToMany : 일대다 매핑 (사용자, 1) : (주문 목록, N)
@ManyToOne : 다대일 매핑 (주문 목록, N) : (사용자, 1)
OrderItem 입장에서는 하나의 아이템은 한 명의 User 에게 매핑되어야 하고
그럼 (OrderItem) 다 : 일 (User) 의 관계가 성립한다.
보통 참조 하는 엔티티 에서 사용을 하는데, 외래 키를 가지고 있는 엔티티라고 생각하면 편하다.
즉시 로딩 (FecthType.EAGER)
엔티티를 조회할 때, 연관된 엔티티를 즉시 한 번에 조회한다.
즉, 실제 객체가 사용되지 않더라도 조회를 해온다.
지연 로딩 (FetchType.LAZY)
엔티티를 조회할 때, 연관된 엔티티는 실제 사용 시점에 조회한다.
즉, 실제 객체가 사용되는 시점까지 조회를 미룬다.
User 입장에서 하나의 사용자는 여러 주문 아이템을 가질 수 있다.
그럼 (User) 일 : 다 (OrderItem) 의 관계가 성립한다.
보통 참조 당하는 엔티티 에서 사용하는데, List 컬렉션을 참조변수로 한다.
@ManyToOne 만 존재한다면, 즉 OrderItem 클래스만 User의 정보를 갖고 있다면, 이는 단방향 연관관계라고 한다.
양방향 연관관계가 될 때 외래 키를 관리하고 있을 주체를 확실히 할 것
- 외래 키를 갖는 주체는 DB 테이블에 외래 키가 있는 쪽으로 한다.
- 외래 키를 갖는 쪽에서만 UPDATE와 INSERT 를 수행하고, 없는 쪽은 SELECT 만 수행할 것
양방향 연관관계에서 상호 참조를 주의할 것
Lombok 의 @ToString
@ToString(exclude = "") 를 이용하여 해결
MVC 에서 JSON Converting 될 때
엔티티를 통신에서 그대로 사용하지 말고 DTO 객체를 만들어서 사용할 것