위처럼 연관관계 매핑을 할때
@ManyToOne(fetch = FetchType.LAZY)
@Entity
@Setter
@Getter
@ToString
public class OrderItem {
@Id
@GeneratedValue
@Column(name = "order_item_id")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id")
private Item item;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "order_id")
private Order order;
private int orderPrice;
private int count;
private LocalDateTime regTime;
private LocalDateTime updateTime;
}
해당 어노테이션이 없을 경우엔 테이블을 조인해서 모두 실행하지만
, 위와 같이 어노테이션을 넣은 경우 쿼리가 한번에 실행되지 않는다
order클래스를 콘솔창에 찍어주면
HibernateProxy가 출력되어있다.
여기서 실제 엔티티 대신 프록시 객체가 들어간 것을 확인할 수 있다.
연관관계 매핑에서 여러개의 테이블을 조인해서 가지고 올때,
실제 비즈니스에서는 엔티티의 개수가 매우 많아 모두 가져오면
조회의 성능이 매우 떨어진다 때문에 지연 로딩을 사용하면 데이터 부하를 줄여 성능을 최적화할 수 있다.