반응형
연관관계 매핑 분석
- 1:N, N:1 양방향 관계에서는 외래키가 있는엔티티를 주인으로 정하는것이 좋다.
- 연관관계의 주인쪽의 값을 세팅해야 값이 변경된다.
- 1:N에서 일 부분에 있는 mappedBy는 단순히 읽기만 하는 역할(단순 조회용)이며, 연관관계의 주인쪽에 세팅을 해야 값이 변경된다.
- 외래키가 가까운 곳에 있는 것을 연관관계의 주인으로 정하는 것이 좋다.
- N:N 돤계에서는 @ManyToMany 사용은 권장되지 않고 1:N + N:1로 풀어내는 것을 권장한다.
엔티티 설계시 주의점
- Entity에서는 가급적 Setter를 사용하지 말자. 변경포인트가 많아서 유지보수가 어렵다.
- 모든 연관관계는 지연로딩으로(lazy loading) 설정한다.
- 즉시로딩(Eager)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다.
- 연관된 에터티를 함께 DB에서 조회해야 하면, fetch join 또는 엔터티 그래프 기능을 사용한다.
- @XToOne(OneToOne, ManyToOne) 관계는 기본이 EAGER(즉시로딩)이므로 지연로딩으로 설정해야 한다.
- 연관관계에서 Lazy Loading 하지 않으면, N+1 문제가 발생 할 수 있다.
참고 자료
'Spring' 카테고리의 다른 글
Spring 과 Spring boot (0) | 2022.06.01 |
---|---|
JpaReporitory vs EntityManager (0) | 2021.11.23 |
Maven vs Gradle (0) | 2021.11.05 |
Spring 이란? (0) | 2021.07.14 |
Spring boot S3 업로드, 수정, 삭제 (0) | 2021.06.18 |