프록시
- 데이터 조회 지연하는 방법
- 준영속상태가 되어 조회를 시도하면
LazyInitializationException
이 발생
EntityManager em;
// ...
Member m1 = em.find(Member.class, "member"); // 즉시 조회
Member m2 = em.getReference(Member.class, "member"); // 지연 조회
즉시 로딩
FetchType.EAGER
- 뒤가 One인 연관관계(ex.
@ManyToOne
,@OneToOne
)
지연 로딩
FetchType.LAZY
- 뒤가 Many인 연관관계(ex.
@ManyToMany
,@OneToMany
)
참고
- NOT NULL에 inner join, NULL에 outer join을 한다. (
optional = false
) - tip) 모두 지연 로딩으로 사용하고, 완료단계 시점에서 필요에 따라 즉시 로딩으로 변경
영속성 전이: CASCADE
- Transitive Persistence
- JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다.
orphanRemovel = true
는CascadeType.REMOVE
와 거의 동일하다.- DDD의 Aggregate Root 개념을 구현할 때 사용하면 편리하다.