Web
수정·
[JPA] Entity 설계 시 유의점.
Spring JPA Entity 설계 시 유의점
1. Entity에는 Setter를 사용하지 말 것
- 무분별한 Setter 지정은 변경 포인트가 많아지기 때문에 유지 보수가 어려워짐
2. 모든 연관 관계는 Lazy Loading으로 설정
- Eager Loading은 예측이 어렵고, SQL 추적이 어렵다. 특히 N+1 문제가 자주 발생한다.
- 연관된 Entity를 DB에서 함께 조회해야할 경우, Fetch join or Entity Graph 를 이용한다.
- ManyToOne, OneToOne 은 기본적으로 Eager Loading으로 동작하므로 반드시 지연로딩으로 설정한다.
3. Collection은 반드시 필드에서 초기화하라.
@Entity
public class SomeEntity{
@OneToMany
@JoinColumn(name="other_id")
List<OtherEntity> others = new ArrayList<>();
}
- 위와 같이 필드에서 직접 초기화를 해야 Java의 고질적인 문제인 null 문제에서 안전하다.
4. 양방향 연관 관계 처리 시 메서드.
@Entity
public class Member{
@Id(name="member_id") @GeneratedValue
Long id;
@OneToMany(mappedBy="product", cascade=CascadeType.ALL)
List<Product> products = new ArrayList<>();
}
@Entity
public class Product{
@Id(name="product_id") @GeneratedValue
Long id;
@ManyToOne(fetch = LAZY)
@JoinColumn(name="member_id")
Member member;
void setMember(Member member){
this.member = member;
this.member.getProducts().add(this);
}
}
- Product class 내부의 setMember method 처럼 구현 할 시 연관관계 데이터 구성 시 간결하게 구성 가능