JPA 프록시

유기훈·2025년 3월 6일

주의사항

  • 지연 로딩만 사용하는 게 좋음
  • 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생할 수 있음 (프로그래밍은 내가 예상한 대로만 돌아가야 함)
  • 즉시 로딩은 JPQL에서 N+1 문제를 일으킨다. => 그에 반해 fetch join은 N+1 문제를 일으키지 않음.
  • @ManyToOne, @OneToOne은 기본이 즉시 로딩(EAGER) => LAZY로 설정 필요
  • @OneToMany, @ManyToMany는 기본이 지연 로딩(LAZY)

영속성 전이

특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고자 할 때 사용

  • 영속성 전이는 연관관계와는 관계 X
  • 연관된 엔티티의 영속 상태 관리 편이성을 위한 기능

저장

@OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST)

CASCADE 종류

  • ALL: 모두 적용
  • PERSIST: 영속
  • REMOVE: 삭제

고아 객체

부모 엔티티와 연관관계가 끊어진 자식 엔티티를 자동으로 삭제 하고자 할 때 사용

  • 참조하는 곳이 하나일 때만 사용하기
  • 특정 엔티티가 개인 소유할 때 사용하기
  • @OneToOne, @OneToMany만 가능

영속성 전이 + 고아 객체

  • CascadeType.ALL + orphanRemoval=true
  • 두 옵션을 모두 활성화 하면 부모 엔티티를 통해서 자식의 생명주기를 관리할 수 있다.
profile
개발 블로그

0개의 댓글