woowacourse-study / 2022-jpa-study

🔥 우아한테크코스 4기 JPA 스터디 (22.06.13~22.07.02) 🔥
5 stars 1 forks source link

[섹션 8] 오찌 제출합니다 #19

Closed Ohzzi closed 2 years ago

Ohzzi commented 2 years ago

섹션 8. 프록시와 연관관계 관리

프록시

프록시 기초

프록시의 특징

즉시 로딩과 지연 로딩

즉시 로딩

지연 로딩

지연 로딩 활용

사내 주문 관리 시스템 설계

애플리케이션 로직 분석

프록시와 컬렉션 래퍼

하이버네이트는 엔티티를 영속 상태로 만들 때 엔티티에 컬렉션이 있으면 컬렉션을 추적하고 관리할 목적으로 원본 컬렉션을 하이버네이트가 제공하는 내장 컬렉션으로 변경

JPA 기본 페치 전략

컬렉션에 FetchType.EAGER 사용 시 주의점

영속성 전이: CASCADE

특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함게 영속상태로 만드는 기능

영속성 전이: 저장

@Entity
public class Parent {
    ...
    @oneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
    private List<Child> children = new ArrayList<Child>();
    ...
}

영속성 전이: 삭제

Parent findParent = em.find(Parent.class, 1L);
em.remove(findParent);

CASCADE의 종류

public enum CascadeType {
    ALL, // 모두
    PERSIST, // 영속
    MERGE, // 병합
    REMOVE, // 삭제
    REFRESH,
    DETACH
}

고아 객체

부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제하는 기능

@Entity
public class Parent {
    @Id @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "parent", orphanRemoval = true)
    private List<Child> children = new ArrayList<>();
    ...
}

영속성 전이 + 고아 객체, 생명주기

CascadeType.ALL + orphanRemoval = true를 동시에 사용할 경우