221031 TIL @OneToMany, @ManyToOne (feat. mappedby)

2022. 10. 31. 21:38·성장이야기/TIL

오늘은 게시판 객체 간의 구조 설계를 위해 @ManyToOne과 @OneToMany에 대해서 공부했다.

 

현재 진행 중인 게시판 프로젝트를 예시로 User(사용자)가 1개 이상의 Post(게시글)을 작성할 수 있기 때문에 아래처럼 테이블 구조를 설계했다. 우선 간단하게 OneToMany와 ManyToOne을 먼저 맛보면 아래 구조에서 User 입장에서는 @OneToMany이고 Post입장에서는 @ManyToOne이다.

  

 

우선 두 객체를 연결하기 위해서 Pos 객체에 User 객체를 만들고, User 객체에는 User가 쓴 글 모두를 담을 수 있는 List타입의 posts를 만들었다.

 

Post객체에 User에는 @ManyToOne 붙여주고 User객체에 Post List에는 @OneToMany를 붙여주었다.

 

@ManyToOne : 다대일(N : 1) 관계 , 한 명의 유저가 여러 게시글을 작성할 수 있기 때문에 게시글을 기준으로 @ManyToOne을 추가해준다. --> 여러 개의 게시글을 한 명의 유저가 작성할 수 있다.

Post 클래스

@OneToMany : 일대다(1 : N)관계, 한 명이 게시글을 여러 개 작성할 수 있으므로 유저를 기준으로 @OneToMany을 추가해준다.

User 클래스

이렇게 설계를 하면 객체가 양방향 연관관계로 만들어지기 때문에 연관관계의 주인을 정해주어야 한다.

연관관계의 주인을 정하기 위해 @OneToMany에 mappedBy 속성을 추가해주었다.

 

양방향 관계로 설정하면 객체의 참조는 양쪽에서 하게 되는데 외래 키는 하나이기 때문에 서로 참조하는 객체 중 연관관계의 주인을 정해 테이블의 외래 키를 관리(등록, 수정, 삭제) 해야 한다. 양방향 관계로 만들려면 일(1) 쪽에 @OneToMany를 추가하고 mappedBy 속성을 사용해서 연관관계의 주인이 아님을 알려줘야 한다.

 

연관관계의 주인을 정하는 방법

  • 주인이 아니면 mappedBy속성을 사용해서 주인을 정할 수 있다.
  • 주인은 mappedBy속성 대신 @JoinColumn을 사용한다.

 

참조 :

https://jyami.tistory.com/21

https://soojong.tistory.com/entry/JPA-ManyToOne-OneToMany-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

'성장이야기 > TIL' 카테고리의 다른 글

221102 TIL JPA n + 1문제란  (0) 2022.11.02
221101 TIL JPA 양방향 연관관계 Infinite recursion문제  (0) 2022.11.01
221030 TIL Spring Boot AWS S3 연동해서 파일 업로드 하기 (S3 Bucket 생성부터 연동까지)  (0) 2022.10.30
221029 TIL 게시판 조회수 기능 구현하기  (0) 2022.10.29
221028 TIL REST API URI설계  (0) 2022.10.28
'성장이야기/TIL' 카테고리의 다른 글
  • 221102 TIL JPA n + 1문제란
  • 221101 TIL JPA 양방향 연관관계 Infinite recursion문제
  • 221030 TIL Spring Boot AWS S3 연동해서 파일 업로드 하기 (S3 Bucket 생성부터 연동까지)
  • 221029 TIL 게시판 조회수 기능 구현하기
seungjjun
seungjjun
  • seungjjun
    개발이야기
    seungjjun
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 성장이야기
        • TIL
        • 주간회고
      • Java
        • Spring
        • Spring Security
      • 트러블슈팅
      • Kafka
      • OS
      • Network
      • 메가테라
      • Database
      • Algorithm
      • Git
      • HTML
      • CSS
      • 독서
      • 컴퓨터 이해하기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    graphQL
    redis
    Til
    항해플러스
    이커머스 프로젝트
    메가테라 주간회고
    항해99
    주간회고
    메가테라
    개발일지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seungjjun
221031 TIL @OneToMany, @ManyToOne (feat. mappedby)
상단으로

티스토리툴바