분류 전체보기89 2. 컬렉션 조회최적화 1. 1:N fetch join의 문제점 1:N 에서 join을 하면 N 개의 row 가 나오는 문제점이 있다. orders(1) : order_item(n) 의 연관관계의 경우 조인하면 아래와같이 로우가 4개 생긴다. 위의 조인된 컬럼에서 중복을 제거하고 싶다.. 어떻게? JPA의 distinct 를 사용해서 제거한다. DB에 distinct 키워드 제공 엔티티가 중복인 경우, 중복을 제거해서 컬렉션에 담아주는 기능을 제공한다. em.createQuery( "select distinct o from Order o" + " join fetch o.orderItems oi" + " join fetch oi.item i", Order.class).getResultList(); 단점 1:N fetch join.. 2021. 1. 9. 1. 지연 로딩과 조회 성능 최적화 1. 순환참조가 있는 엔티티를 직접 반환하는 API 의 문제점과 해결책 순환참조가 있는 엔티티를 반환하는 api를 사용하면 순환참조로 인한 무한루프가 발생 해결책 (비추천) : @JacksonIgnore FetchType.LAZY 인 경우, 프록시를 통한 가짜 객체를 생성하는데, Jackson이 파싱하지 못하는 에러 발생 해결책 (비추천) : implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5' 모듈을 등록 Hibernate5Module을 빈으로 등록하여 프록시는 Jackson 이 파싱하지 않도록 함 애초에 엔티티를 직접 반환하지말고, DTO로 변환하는 정책을 사용하자. 2. Dto 로 감싸서 반환하도록 하는 API 로 변.. 2021. 1. 7. 3. 변경 감지와 병합 0. Merge vs Dirty Checking 준영속 엔티티란? 영속성 컨텍스트가 더이상 관리하지 않는 엔티티 식별자를 갖고 있지만, 영속성 컨텍스트가 관리하지 않는 엔티티 1. Dirty Checking (변경 감지) 해당 코드가 tx.commit() 이 될 때, 영속성 컨텍스트가 변경감지를 통해 데이터베이스에 반영 @Transactional public void updateItem(Long itemId, BookForm form) { Item findItem = itemRepository.findOne(itemId); findItem.setPrice(form.getPrice()); findItem.setName(form.getName()); findItem.setStockQuantity(form.g.. 2021. 1. 5. 10. 중급 문법 1. 경로표현식 특징 상태 필드 단순히 값을 저장하기 위한 필드 ex) m.username 연관 필드 단일 값 연관 필드 @XToOne 묵시적 조인이 발생 (inner join) 컬랙션 값 연관 필드 @XToMany 묵시적 조인이 발생 묵시적 조인을 쓰지말고, 명시적 조인을 만들어서 써라. 2. 페치 조인 JPQL 성능 최적화를 위해 제공되는 기능이다. 연관된 엔티티나 컬렉션을 SQL 한번에 함께 조회하는 기능이다. ex) select m from Member m join fetch m.team 컬렉션 패치 조인 1대 다 조인인 경우에는 데이터가 뻥튀기 될 수 있다. distinct로 제거할 수 있다. JQPL distinct는 중복된 엔티티를 제거해준다. (sql distinct 와는 조금 차이가 있음.. 2021. 1. 2. 이전 1 ··· 12 13 14 15 16 17 18 ··· 23 다음