본문 바로가기

Lazy3

JPA - 객체지향 쿼리 언어 - JPQL Fetch Join - 참조: 자바 ORM 표준 JPA 프로그래밍 - 페치 조인(Fetch Join) 페치 조인은 SQL 에서 이야기하는 조인의 종류를 말하는것은 아니다. 이전에 지연 로딩에 대해서 알아본적이 있는지 지연 로딩과 관련된 얘기이며 성능 최적화를 위해 제공하는 기능이다. 문법이 크게 어렵지는 않다. [ INNER | LEFT [OUTER] ] JOIN FETCH 와 같이 기존 Join 문법 뒤에 FETCH 를 붙여주기만 하면 된다. - 엔티티 페치 조인 앞에서 User#1 과 주문 2 건을 사용하던 예제를 계속 사용해보자. Order 에서 Member 엔티티 @ManyToOne 맵핑시 FetchType 은 Lazy 라고 가정한다. 이전에 INNER JOIN 을 이용하여 Order 와 Member 엔티티를 Joi.. 2021. 7. 31.
JPA - 지연 로딩 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 지연 로딩 사내 주문 관리 시스템을 개발한다고 가정해보자. 요구사항은 아래와 같다. 회원은 팀 하나에만 속할 수 있다. 회원은 여러 주문내역을 가진다. 주문내역은 상품정보를 가진다. 이를 UML 다이어그램에서 다중성을 표시하면 위와 같다. 연관 엔티티를 로딩할 때 즉시냐 지연이냐를 결정하는것은 비즈니스 로직을 고려해야 한다. 비즈니스 로직이 아래와 같은 특성을 갖는다고 가정해보자. Member 와 Team 은 자주 함께 사용되었다. Member 과 연관된 Order 는 가끔 사용되었다. Order 와 연관된 Product 는 자주 함께 사용되었다. @Entity public class Member { @Id @Column(name = "USER_ID") .. 2021. 7. 16.
JPA - 즉시 로딩과 지연 로딩 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 즉시 로딩과 지연 로딩 이전에 살펴본 프록시 객체는 주로 연관된 엔티티를 지연 로딩할 때 사용한다. Member member = em.find(Member.class, 2L); Team team = member.getTeam(); System.out.println(team.getName()); 위와 같이 회원이 팀에 소속되어 있다고 가정해보자. 이때 회원 엔티티 조회시 팀까지 한꺼번에 하는게 좋을까? 아니면 팀 엔티티를 실제 사용시할때까지 조회를 미루는것이 좋을까? JPA 는 이 두 가지 방식을 모두 지원한다. 즉시 로딩: 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다. @ManyToOne(fetch = FetchType.EAGER) 로 설정할 수 있.. 2021. 7. 15.