A 테이블에 수백개의 테이블이 연관되어 있다고 가정해보자. 만약 A 테이블을 조회한다면 A 와 연관된 테이블들을 모두 가져올 것이고, A 와 연관된 테이블들과 연관된 테이블들도 가져오려고 할 것이다.
우리는 우리에게 필요한 A 만 찝어서 가져오는 로직이 필요하다!
JPA 는 프록시(가짜 객체)라는 개념을 써서 A 와 연관된 테이블들의 조회를 실제로 사용할 때 까지 미루는 방법을 사용한다.
프록시를 이용해 위와 같은 문제를 해결할 수 있는 방법으로 지연로딩
이 있다.
지연로딩
: 조회 시 프록시 엔티티를 가져옴 @ManyToOne(fetch=fetchType.LAZY)
즉시로딩
: 조회 시 진짜 엔티티를 가져옴@ManyToOne(fetch=fetchType.EAGER)
@ManyToOne, @OneToOne 은 기본 값이 즉시 로딩이기 때문에 지연로딩으로 바꿔줘야 한다.
DB 의 CASCADE 설정을 할 수 있다.
자식 엔티티에 아래와 같은 속성을 추가시켜 주면 된다.
예를 들어 저장이나 삭제 시 연관된 엔티티를 대상으로 자동으로 같은 작업을 하게 된다.
@OneToMany(mappedBy="parent", cascade=CascadeType.XXXX)
자식 엔티티가 부모 엔티티와 연관관계가 끊어지면 자식 엔티티를 자동으로 삭제한다.
CascadeType.REMOVE
처럼 동작한다@OneToMany(orphanRemoval = true)
고아 객체와 CASCADE를 같이 사용(CasCadeType.ALL + orphanRemoval = true)하면 부모 엔티티로 자식 엔티티의 생명주기를 관리할 수 있다.
출처