① x ToOne (OneToOne, ManyToOne) 관계는 모두 Fetch Join 한다. (ToOne 관계는 row 수를 증가시키지 않음으로 페이징 쿼리에 영향을 주지 않기 때문이다.) ② 컬렉션은 지연로딩으로 조회 (Fetch Join으로 조회하지 않고 그냥 둔다.) ③ 'hibernate.default_batch_fetch_size' 와 '@BatchSize' 를 적용한다. 지연로딩 성능 최적화를 위해, 'hibernate.default_batch_fetch_size' : 글로벌 설정 '@BatchSize' : 특정 엔티티 설정 을 적용한다. ① x ToOne (OneToOne, ManyToOne) 관계는 모두 Fetch Join 한다. 'Order' - 'Member' : ManyToOne ..
분류 전체보기
※ 페치 조인은 대부분의 'N+1' 문제를 해결 할 수 있다. ※ Member 엔티티 / Team 엔티티 0. 필드 (field) 종류 ① 상태필드 (state field) : 단순히 값을 저장하기 위한 필드 * 연관필드 (association field) : 연관관계를 위한 필드 ② 단일 값 연관필드 : @ManyTo"One", @OneTo"One" 연관관계에 해당하며, 대상이 '엔티티' 이다. (ex) m.team) ③ 컬렉션 값 연관필드 : @OneTo"Many", @ManyTo"Many" 연관관계에 해당하며, 대상이 '컬렉션' 이다. (ex) m.order) ※ 컬렉션 값 연관필드의 탐색 컬렉션 값 연관필드(t.members) 에서 한번더 탐색(.username) 이 불가능하다. 만약, 탐색을 원..
** 지연 로딩은 어떠한 상황에 사용해야 하는가? ** * MEMBER의 ID와 USERNAME 만을 조회하여 이용하고자 할때, Team 객체 조회는 필요한가? 당연하게도 Team 조회는 불필요하다. 이 경우 Member.class의 team 필드를 지연로딩(FetchType.LAZY) 설정 하면된다. * findMember : em.find() 를 통해 생성한 객체 정보 확인 * findMember.Team 필드의 객체 정보 확인 SELECT SQL 쿼리를 보면, Team 과 Member를 INNER JOIN 으로 동시에 조회 해오는 것이 아니라, Member 만 먼저 조회해 온다. " findMember : em.find() " 의 클래스는 '실제 엔티티' " findMember.Team 필드 " 의..
JPA 에서의 '프록시(Proxy)' 는 기존에 알고 있던, 클라이언트와 서버 사이에 위치하는 '프록시 서버(Proxy Server)' 와는 개념이 전혀 달랐다. 느낌은 비슷했는데, "사용자가 리소스에 직접 접근하지 않고, 대신 접근해주는 중간 매개체" 라는 점이 비슷했다. "프록시 서버 (Proxy Server)" 는 클라이언트가 직접 서버와 통신하지 않고, 프록시 서버를 통해 서버와 통신하는 것이고, "JPA 의 프록시 (Proxy)" 는 실제 엔티티 객체를 조회하는 대신, 지연로딩을 하는 가짜 (프록시) 엔티티 객체를 조회하는 것이다. 1. 프록시의 필요성 ※ 아래와 같은 객체가 존재할때, Member를 조회할때, Team도 함께 조회해야 하는가? Member의 데이터만 사용하는데, Team 까지 ..
RDB는 상속관계가 존재하지 않는다. 슈퍼타입 / 서브타입 관계라는 모델링 기법이 객체 상속과 유사 객체 구조 공통 속성을 상위 객체인 'Item'으로 묶고, 하위 객체 안에는 각자의 속성을 구성 > ※ JPA의 기본 전략 : 단일 테이블(SINGLE_TABLE) ※ 모든 전략에서 상위테이블(ITEM)은 추상 클래스(abstract)로 해야한다. => 추상 클래스로 설정하지 않는다면, 상속관계와는 별도의 클래스로 사용될 우려가 있기 때문이다. 1. 조인 전략 (JOINED) ▶기본적으로 "정석"으로 사용되는 전략◀ * JPA의 기본 전략인 단일 테이블( SINGLE_TABLE )을 조인 전략(JOINED)로 변경하기 ** 상위 엔티티(Item)에 @Inheritance(strategy = Inherita..
* 연관관계 매핑시 고려사항 3가지 1. 다중성 : 다대일 , 일대다 , 일대일 , 다대다 2. 단방향 / 양방향 : 테이블 - 외래키 하나로 양쪽 조인 가능 ( 방향 개념 X ) 3. 연관관계 주인 = 외래키(FK) 를 가지고 있는 엔티티 연관관계 주인이 먼저 등장 * 다대일 (N : 1) ▶ 가장 많이 사용 ◀ ※ 연관관계 주인은 '다(N)' 이다. ※ 실선 화살표 : 값 입력이 가능한 연관관계 / 점선 화살표 : 조회만 가능한 연관관계 (주) Member -> (종) Team 으로의 단방향 연관관계가 메인이다. 양방향 연관관계를 위해 (종)Team -> (주)Member 로의 연관관계를 추가 한다고 해서 테이블 구성이 달라지지 않는다. ( (종)Team -> (주)Member 연관관계는 조회 전용이..