Post

TIL-Spring 숙련주차(3)

2024-05-23

오늘의 학습 🌠


1

지연 로딩과 즉시 로딩


  • JPA는 연관관계가 설정된 Entity의 정보를 바로 가져올지, 필요할 때 가져올지 정할 수 있음.
    • 즉, 가져오는 방법을 정하게 되는데 JPA에서는 Fetch Type이라고 부름

    • Fetch Type의 종류에는 2가지가 있는데 하나는 LAZY, 다른 하나는 EAGER임.
    • LAZY는 지연 로딩으로 필요한 시점에 정보를 가져옴.
    • EAGER는 즉시 로딩으로 이름의 뜻처럼 조회할 떄 연관된 모든 Entity의 정보를 즉시 가져옴.
  • 기본적으로 @OneToMany 애너테이션은 Fetch Type의 default 값이 LAZY로 지정되어있고 반대로 @ManyToOne 애너테이션은 EAGER로 되어있음.

  • 영속성 컨텍스트의 기능
    • 1차 캐시

    • 쓰기 지연 저장소
    • 변경 감지
  • 지연 로딩도 마찬가지로 영속성 컨텍스트의 기능 중 하나임.
    • 따라서 지연 로딩된 Entity의 정보를 조회하려고 할 때는 반드시 영속성 컨텍스트가 존재해야 함.
    • ‘영속성 컨텍스트가 존재해야한다’라는 의미는 결국 ‘트랜잭션이 적용되어있어야 한다’라는 의미와 동일함.
  • 즉, 지연 로딩은 @Transactional 걸어줘야됨

고아 Entity 삭제


  • orphanRemoval
    • CASCADE의 REMOVE 옵션을 적용하면 해당 Entity 객체를 삭제 했을 때 연관된 Entity 객체들을 자동으로 삭제할 수 있었음.
    • 하지만 REMOVE 옵션 같은 경우 연관된 Entity와 관계를 제거했다고 해서 자동으로 해당 Entity가 삭제 되지는 않음.

    • JPA에서는 이를 간편하게 처리할 수 있는 방법으로 orphanRemoval 옵션을 제공
    • orphanRemoval 같은 경우 @ManyToOne 같은 애너테이션에서는 사용할 수 없음.
      • ManyToOne이 설정된 Entity는 해당 Entity 객체를 참조하는 다른 Entity 객체들이 있을 수 있기 때문에 속성으로 orphanRemoval를 가지고 있지 않음.

🐱‍🏍— —🤸🏻‍♀️ ~~~ 야~호~

This post is licensed under CC BY 4.0 by the author.