엔티티 설계 시 주의점
엔티티에는 가급적 Setter 를 사용하지 말자
- setter 가 열려있다 > 변경 포인트가 너무 많아서 유지보수가 어렵다!
모든 연관관계는 지연로딩으로 설정!
- 즉시로딩(EAGER) 는 예측이 어렵고, 어떤 SQL 이 실행될 지 추적하기 어렵다. 특히 JPQL을 시행할 때 N+1 문제가 자주 발생한다
- 실무에서 모든 연관관계는 지연로딩(
LAZY)로 설정해야 한다. - 연관된 엔티티를 함께 DB에서 조회해야 한다면, fetch join 또는 엔티티 그래프 기능으 활용 한다.
- @XtoOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정 해주어야 한다.
컬랙션은 필드에서 초기화 하자.
컬랙션은 필드에서 바로 초기화 하는 것이 안전하다.
null문제에서 안전하다.- 하이버네이트는 엔티티를 영속화 할 때, 컬랙션을 감싸서 하이버네이트가 제공하는 내장 컬랙션으로 변경한다. 만약
getOrders()처럼 임의의 메서드에서 컬랙션을 잘못 생성하면 하이버네이트 내부 매커니즘 문제가 발생할 수 있다. 따라서 필드 레벨에서 생성하는 것이 가장 안전하고, 코드도 간결하다.
댓글남기기