오늘은 게시판 객체 간의 구조 설계를 위해 @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 클래스
User 클래스
이렇게 설계를 하면 객체가 양방향 연관관계로 만들어지기 때문에 연관관계의 주인을 정해주어야 한다.
연관관계의 주인을 정하기 위해 @OneToMany에 mappedBy 속성을 추가해주었다.
양방향 관계로 설정하면 객체의 참조는 양쪽에서 하게 되는데 외래 키는 하나이기 때문에 서로 참조하는 객체 중 연관관계의 주인을 정해 테이블의 외래 키를 관리(등록, 수정, 삭제) 해야 한다. 양방향 관계로 만들려면 일(1) 쪽에 @OneToMany를 추가하고 mappedBy 속성을 사용해서 연관관계의 주인이 아님을 알려줘야 한다.
연관관계의 주인을 정하는 방법
- 주인이 아니면 mappedBy속성을 사용해서 주인을 정할 수 있다.
- 주인은 mappedBy속성 대신 @JoinColumn을 사용한다.
참조 :
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 |