Backend/Database

[JPA] 연관관계 매핑 주의점 정리

mopil 2022. 8. 19. 18:19
반응형

# 테이블 별 PK (ID) 설정 시 주의점

  • ID는 테이블 별로 독립적으로 생성하는게 좋다 -> 서비스가 커질수록 공통으로 ID 값을 쓰면 관리하기 어렵기 때문이다.
  • 비슷한 의미에서 ID 값은 Int 보다는 Long을 사용한다 -> Int 최대값 : 21억, Long 최대값 : 경단위. 나중에 서비스가 커지면 21억의 숫자는 나름 금방 채워지고, 이때 Int -> Long 마이그레이션 비용이 많이 발생한다. (실무팁)

# 외래키의 주인은 '다' 쪽에서 관리한다

 

# @ManyToMany 다대다

  • JPA에서 다대다 옵션을 제공하긴 하지만, 실무에서는 사용하면 안 된다.
  • 암묵적으로 테이블을 만들어줘서 관리하기 힘들기 때문이다.

# 다대다 구현

  • 일대다 + 다대일 관계로 풀어서 테이블을 설계한다.
  • 암묵적 테이블을 엔티티 수준으로 승격시켜서 사용해야한다.

 

# 1:다 - 1 입장

@OneToMany(mappedBy = "XXX", cascade = CasecadeType.ALL)

  • 1 입장에서 삭제를 했을 때, 다 입장도 같이 지워질 수 있도록 Casecade 옵션을 넣는다.
  • mappedBy 를 설정해주지 않으면, 추가적인 칼럼이 생성되므로 넣어주자.
  • 다 입장을 받을때는 리스트를 이용해서 복수형으로 받는다.

 

# 1:다 - 다 입장

@ManyToOne(fetch = FetchType.LAZY)

@JoinColumn(name = "XXX_id")

 

반응형