jpa 3

[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)..

ORM, JPA, Hibernate 그리고 Spring Data JPA

1. ORM (Object - relational mapping)테이블을 객체 지향적으로 사용하기 위한 기술이며 객체와 DB 테이블이 매핑을 이루는 것을 의미한다.JPA에서 DB 접근 시 직접 쿼리를 만들지 않고 메소드로 호출 하기 때문에 사용하기에 따라 굉장히 편리 할 수 있다. 장점별도의 SQL을 사용하지 않아도 개발이 가능하다.재사용 및 유지보수 편의성을 기대 할 수 있다.DBMS에 대한 종속성이 줄어든다.단점완벽한 ORM으로 서비스를 구현하기에는 한계가 있다.충분한 이해가 없을 경우 문제가 발생 할 수 있고 해결이 힘들 수 있다. 2. JPA (Java Persistent API)자바 진영에서 정리한 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다. 즉, 기술명세인 것이다.JPA를 사용..