Web
수정·

[JPA] Entity 설계 시 유의점.

by Dohoon Kim · 23년 04월 03일 09:00:00

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 처럼 구현 할 시 연관관계 데이터 구성 시 간결하게 구성 가능