1. 지연로딩
Fetch Type의 종류에는 2가지가 있는데 하나는 LAZY , 다른 하나는 EAGER 이다.
- LAZY 는 지연 로딩 으로 필요한 시점에 정보를 가져옴
- EAGER는 즉시 로딩 으로 이름의 뜻처럼 조회할 때 연관된 모든 Entity의 정보를 즉시 가져옴
- 지연 로딩을 사용하면 실제 엔티티 객체 대신 가짜 객체가 필요한데, 이것이 바로 "프록시 객체"
실무에서는 가급적 지연 로딩만 사용 -> 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생
@ManyToOne, @OneToOne과 같이 @XXXToOne 어노테이션들은 기본이 즉시 로딩(EAGER) 이다.
-> 꼭 LAZY로 명시적으로 설정해서 사용
2. 영속성 전이
Parent가 관리하는 Child 인스턴스의 경우 Parent를 em.persist()할 때 같이 진행하면 편함
@OneToMany(mappedBy = "parent",cascade = CascadeType.ALL)
private List<Child> childes = new ArrayList<>();
Cascade 조건
- Cascade되는 엔티티와 Cascade를 설정하는 엔티티의 라이프사이클이 동일하거나 비슷해야한다.
- Cascade되는 엔티티가 Cascade를 설정하는 엔티티에서만 사용되어야 한다.
orphanRemoval 옵션 ( OnetoMany나 OnetoOne )
- 부모와 연관관계가 끊어진 엔티티를 고아객체라고 함
- 고아객체를 자동으로 삭제해주는 옵션을 활성화
orphanRemoval=true와 Cascade.REMOVE 차이 (remove, delete)
- Cascade.REMOVE의 경우 : 해당하는 엔티티를 em.remove를 통해 직접 삭제할 때,그 아래에 있는 多에 해당하는 엔티티들이 삭제
- orphanRemoval=true의 경우 : 물론, 엔티티의 리스트에서 요소를 삭제하기만 해도 해당 엔티티가 delete되는 기능까지 포함
출처 : https://ict-nroo.tistory.com/132 https://hongchangsub.com/jpa-cascade-2/
https://tecoble.techcourse.co.kr/post/2021-08-15-jpa-cascadetype-remove-vs-orphanremoval-true/
'TIL' 카테고리의 다른 글
[TIL] 20240202 Spring ResponseEntity (0) | 2024.02.02 |
---|---|
[TIL] 20240131 Spring security JWT 필터 (0) | 2024.01.31 |
[TIL] 20240129 JPA 연관 관계 (1) | 2024.01.29 |
[TIL] 20240125 Spring security 기본 (0) | 2024.01.25 |
[TIL] 20240124 Web 인증방식 - 쿠키세션, JWT (0) | 2024.01.24 |