ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL 52th day
    TIL(Today I Learned) 2021. 12. 13. 21:48

    모든 연관관계는 지연로딩(LAZY)으로 설정(중요) 📌

    • 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다.
    • 실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야한다.
    • 연관된 엔티티를 함께 조회해야 하면 fetch join 또는 엔티티 그래프 기능을 사용한다.
    • @xxxToOne(OneToOne, ManyToOne)으로 된 어노테이션은 default가 fetchType.EAGER로 설정되어있기 때문에 LAZY로 수동 설정해줘야한다.(주의)

    즉시로딩(EAGER)

    조회(로딩)하는 엔티티에 관련된 엔티티를 한번에 조회(로딩)하는 것을 의미

    JPQL N+1 문제

    연관 관계에서 발생하는 이슈로, 연관 관계가 설정된 엔티티를 조회할 경우 조회된 데이터 갯수(n) 만큼 추가로 데이터를 읽어오게 된다.

    컬렉션은 필드에서 초기화

    • null 문제에서 안전
    • 하이버네이트는 엔티티를 영속화할 때 컬렉션을 감싸서 내장 컬렉션으로 변경하기 때문에, 임의의 메서드에서 컬렉션을 잘못 생성하면 하이버네이트 내부 메커니즘에 문제가 발생할 수 있다. 따라서, 필드레벨에서 생성하는 것이 가장 안전하고 코드도 간결하다.
    • 아래는 예제 코드이다.
    
    @OneToMany(mappedBy = "parent")
    private List<Category> child = new ArrayList<>();

    스프링 부트 신규 설정

    1. 카멜 케이스 -> 언더 스코어(memberPoint -> member_point)
    2. ,(점) -> _(언더 스코어)
    3. 대문자 -> 소문자
    • 아래는 예시 코드
    
        private LocalDateTime orderDate; //order_date
    

    적용 2단계

    1. 논리명 생성 : 명시적으로 컬럼, 테이블 명을 입력하지 않으면 ImplicitNamingStategy 사용
    2. 물리명 적용 : 모든 논리명에 적용, 실제 테이블에 적용(username -> usernm 등으로 회사 룰로 바꿀 수 있음)
    • 아래는 예시 코드
    
    @Table(name="jpashop_orders")    //jpashop이 회사 룰로 정해진 물리적 테이블 명
    

    CascadeType.All

    The persistence will propagte all EntityManage operations to the ralating entities
    (모든 엔티티매니저 작업을 관련 엔티티에 전파한다는 의미)

    • 모든 Entity는 persistent 하려면 직접 설정해줘야 하는데 이를 CascadeType.All을 이용해 자동으로 처리해줄 수 있다.
    • 아래코드는 예시
      • 설명) order를 실행할 때, orderItems가 같이 발동된다.
      • order를 실행할 때 delivery가 함께으로 실행
    //Order.java
        @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
            private List<OrderItem> orderItems = new ArrayList<>();
    
    
        @OneToOne(fetch = LAZY, cascade = CascadeType.ALL)
        @JoinColumn(name = "delivery_id")
        private Delivery delivery;

    'TIL(Today I Learned)' 카테고리의 다른 글

    TIL 54th day  (0) 2021.12.16
    TIL 53th day  (0) 2021.12.14
    TIL 51th day  (0) 2021.12.12
    TIL 50th day  (0) 2021.12.11
    TIL 49th day  (0) 2021.12.10
Designed by Tistory.