Spring/SpringBoot_JPA

엔티티 설계 주의점

민철킹 2021. 5. 18. 21:16

엔티티에는 가급적 Setter를 사용하지 말자

Setter가 모두 열려있으면 변경 포인트가 많아지고, 어디서 변경되었는지를 알아내기가 어려워진다.
==> 유지보수가 어렵다.

 

 

모든 연관관계는 지연로딩으로 설정(FetchType.LAZY) ==> 중요!!!!!!

더보기

EAGER는 하나의 객체를 DB로부터 읽어올 때 참조 객체들의 데이터까지 전부 읽어오는 방식을 뜻한다.

 

반대로 LAZY 타입은 게을러서, 참조 객체들의 데이터들은 무시하고 해당 엔티티의 데이터만을 가져온다.

EAGER은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. JPQL을 실행할 때 N + 1 문제가 자주 발생

모든 연관관계는 LAZY(지연로딩)으로 설정해야함.
연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용

@OneToOne, @ManyToOne 관계는 default가 EAGER이므로 LAZY로 설정해야함.
@OneToMany는 default가 LAZY

@ManyToOne
@OneToMany

 

 

컬렉션은 필드에서 초기화

null 문제에서 안전함.

Hibernate는 엔티티를 영속화(persist)할 때, 컬랙션을 감싸서 Hibernate가 제공하는 내장 컬렉션으로 변경.
만약 임의의 메서드에서 컬렉션을 잘못 생성하면 Hibernate 내부 메커니즘에 문제가 발생할 수 있음.

필드 레벨에서 생성하는 것이 가장 안전하고, 코드도 간결!

 

 

 

연관관계 편의 메서드

 

양방향 연관관계 세팅을 위한 편의 메서드

 

반응형

'Spring > SpringBoot_JPA' 카테고리의 다른 글

API 개발 기본  (0) 2021.05.26
변경 감지와 병합(merge)  (0) 2021.05.24
테스트 예외처리  (0) 2021.05.20
도메인 모델, 테이블 설계  (0) 2021.05.17
JPA, DB 설정 + 간단한 테스트  (0) 2021.05.16