Springboot

[Springboot] OneToMany VS ManyToOne

KJihun 2023. 7. 30. 23:52
728x90

 

 

Springboot에서 관계는 1:1, 1:N, N:1, N:M 관계가 있다.

이 중 OneToMany는 1:N을,  ManyToOne은 N:1을 표현하는 어노테이션이다.

이 두개는 외래키의 위치가 다르며 게시글과 댓글로 예를 들자면

OneToMany는 게시글 안에 댓글을 포함시키는 것이고 외래키는 댓글이 가지게 된다.

ManyToOne은 댓글이 하나의 게시글을 참조하는 것(가리키는 것)이며 외래키는 게시글이 가진다.

 


 

OneToMany

  • 외래키를 N에서 관리하지만 1에서 N쪽을 제어(CRUD)할 수 있기에 헷갈릴 수 있다.
  • 테이블의 특정 레코드 삭제 및 업데이트시 모든 레코드를 확인해야 하는 문제가 발생할 수 있다.
  • 연관관계 관리를 위해 추가로 UPDATE SQL이 실행된다


 

OneToMany

  • 외래키를 1에서 관리하기에 DB에서 외래 키를 관리하는데 더 쉽고 효율적이다.
  • OneToMany와 비교해 봤을 때, 삭제 및 업데이트 작업이 더 간단해진다.

 





ManyToOne은 DB 설계 관점 및 편의성과 성능 최적화를 위해 권장되는 접근 방법이다.

단방향 매핑 시, 특정 상황을 제외하고는 ManyToOne을 사용하는게 좋다.