[자바 ORM 표준 JPA 프로그래밍 - 기본편]
섹션 8.프록시와 연관관계 정리- 즉시로딩과 지연로딩 ~ 실전예제5. 연관관계 관리
즉시로딩과 지연로딩
- 지연로딩: fetch=FetchType.LAZY를 사용해 프록시로 조회. 실제 객체를 사용하는 시점에 DB를 조회해서 초기화.
- 즉시로딩: fetch=FetchType.EAGER를 사용해 한번에 조회.
- 실무에서 지연로딩만 사용해야 함. 즉시로딩은 예상하지 못한 sql 발생(JPQL에서 N+1 문제 발생).
- @ManyToOne, @OneToOne은 기본이 즉시 로딩이므로 LAZY로 설정(@OneToMany, @ManyToMany는 기본이 지연로딩).
영속성 전이 (cascade=CascadeType.종류)
- 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용.
- 연관관계 매핑과 아무 관련X. 참조하는 곳이 하나일 때만 사용해야함.
-종류: ALL, PERSIST, REMOVE, MERGE, REFRESH,DETACH(ALL,PERSIST정도만 실무에서 사용 권장)
고아객체(orphanRemoval=true)
- 부모 엔티티와 연관관계가 끊어진 자식엔티티를 자동으로 삭제.
- 참조하는 곳이 하나일 때 사용해야함.(특정 엔티티가 개인 소유할 때 사용)
- @OneToOne, @OneToMany만 가능.
- CascadeType.REMOVE처럼 동작.
*CascadeType.ALL+orphanRemoval=true 부모 엔티티를 통해서 자식의 생명 주기를 관리할 수 있음.
'공부일기 > JPA' 카테고리의 다른 글
JPA 공부일기(12) (0) | 2023.03.21 |
---|---|
JPA 공부일기(11) (0) | 2023.03.20 |
JPA 공부일기(9) (0) | 2023.01.30 |
JPA공부일기(8) (0) | 2023.01.27 |
JPA공부일기(7) (0) | 2023.01.15 |
댓글