목록JPA (4)
HwangHub
주요 메서드 정리 save(s) : 새로운 엔티티는 저장하고, 이미 있는 엔티티는 병합한다. delete(s) : 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove()호출한다. findById(id) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find()호출한다. getOne(id) : 엔티티를 프록시로 조회한다. 내부에서 EntityManager.getReference()호출한다. findAll() : 모든 엔티티를 조회한다. 정렬(sort)이나 페이징(paging) 조건을 파라미터로 제공할 수 있다. 메서드 이름으로 쿼리 생성 (전체 데이터 JPA 기술 원리를 같이 이해해야 함) 정해진 규칙에 따라 메서드 이름을 설정하면, 스프링 데이터 JPA가 JpaRepo..
보호되어 있는 글입니다.
엔티티 조회 방식 XToOne 필드에 대하여 JOIN FETCH를 적용하고, 연관관계 컬렉션 필드(XToMany)에 대해서는 batch size를 설정하는 방법을 이용하여 엔티티 조회 방식에 최적화를 이뤄낼 수 있었다. 이는 JPA에서 제공해주는 기능을 적극적으로 활용한 로직이므로, 유지보수시에 코드를 거의 수정하지 않고 옵션만 약간 변경해서 적용해가며 다양한 성능 최적화를 시도할 수 있다. /** * V3.1 엔티티를 조회해서 DTO로 변환 페이징 고려 * - ToOne 관계만 우선 모두 페치 조인으로 최적화 * - 컬렉션 관계는 hibernate.default_batch_fetch_size, @BatchSize로 최적화 */ @GetMapping("/api/v3.1/orders") public Lis..

장점 만약 어떤 엔티티의 dto를 조회한다고 했을 때, 해당 엔티티의 필드 중 어떤 엔티티가 컬렉션으로 연관관계가 묶여 있을 경우 이 조회 기능에 fetch join을 사용하지 않고 dto로 변환하고자 한다면, 이 과정에서 LAZY인 연관관계를 조회하기 위해 무수히 많은 쿼리문이 발생할 것이다. (1+N 이슈) @GetMapping("/api/v2/orders") public List ordersV2() { List orders = orderRepository.findAll(); List result = orders.stream() .map(o -> new OrderDto(o)) .collect(toList()); return result; } public List findAll() { return em..