간단이론정리/JPA 2

[JPA] N+1에 대하여

1번의 쿼리를 날렸는데 조회된 데이터 갯수(N) 만큼 쿼리를 추가 실행하는 것. 일대다 혹은 다대일 관계를 조회 할 때 발생 할 수 있다. 하위 엔티티들을 첫 쿼리 실행시 한번에 가져오지 않고, Lazy Loading으로 필요한 곳에서 사용되어 쿼리가 실행될때 발생하는 문제. 해결방법1. Fetch JoinN+1 자체가 발생하는 이유는 한쪽 테이블만 조회하고 연결된 다른 테이블은 따로 조회하기 때문이다.미리 두 테이블을 JOIN 하여 한 번에 모든 데이터를 가져올 수 있다면 애초에 N+1 문제가 발생하지 않을 것이다. 단점쿼리 한번에 모든 데이터를 가져오기 때문에 JPA가 제공하는 Paging API 사용 불가능(Pageable 사용 불가)1:N 관계가 두 개 이상인 경우 사용 불가패치 조인 대상에게 별..

[JPA] 영속성 컨텍스트 (Persistence Context)

영속성 컨텍스트(Persistence Context)Entity를 영구 저장하는 환경. 눈에 보이지 않기 때문에 어플리케이션과 DB 사이 객체를 보관하는 가상 DB로 생각해도 무방 하다. EntityManager를 통해 접근.엔티티 생명 주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태영속(managed) : 영속성 컨텍스트에 관리되는 상태준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태삭제(remove) : 삭제된 상태 비영속(new)Member member = new Member(); // 엔티티(객체) 생성객체 생성엔티티가 영속성 컨텍스트에 없는 상태 (= 영속성 컨텍스트와 관계 x) 영속(managed)em.persist(member)..