11. 연관관계의 주인

2022. 1. 24. 16:52· 취업 준비/Spring boot

연관관계의 주인 ==> FK를 누가 가졌는가?

 

1. Board.java

package com.pure.blog.model;

import java.sql.Timestamp;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Board {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY) //auto_increment
	private int id;
	
	@Column(nullable = false, length = 100)
	private String title;
	
	@Lob // 대용량 데이터
	private String content; //섬머노트 라이브러리 <html>태그가 섞여서 디자인 됨.
	
	@ColumnDefault("0")
	private int count; // 조회수
	
	@ManyToOne(fetch = FetchType.EAGER) //Many = Board, User = One  // 한 명의 유저가 여러개의 보드 글을 쓸 수 있음. //EAGER가 기본. 무조건 들고와.
	@JoinColumn(name="userId") //userId가 FK로 생성됨
	private User user; // DB는 오브젝트를 저장할 수 없다. --> FK 사용. 하지만 자바는 오브젝트를 저장할 수 있다.
		
	@OneToMany(mappedBy = "board", fetch = FetchType.EAGER) //하나의 게시글에 여러개의 댓글이 달릴 수 있음.	/ mappedBy --> 연관관계의 주인이 아님.(FK가 아님을 뜻함.) = DB에 컬럼을 만들지 말아라.
	private List<Reply> reply;
	
	@CreationTimestamp
	private Timestamp createDate;
	
}

FK를 설정하는데 User 테이블의 id가 FK이기 때문에 @JoinColumn(name="userId")가 들어간 것.

ManyToOne의 관계 형식에서 To 앞의 것이 현재 설계중인 테이블을 가리키고 뒤에 것이 관계지을 녀석을 가리킴.

고로, Many = Board 이고 One = User 임.

하나의 유저가 여러개의 글을 쓸 수 있다는 뜻.

 

아래의 OneToMany는 @Join 이 아닌 mappedBy를 썼는데, 이 말은 reply는 FK가 아니라는 뜻임.

One = Board, Many = reply ==> 하나의 게시글에 여러개의 댓글이 달릴 수 있음.

하지만 select해서 board 테이블을 불러올 때 댓글을 조인시켜서 같이 보여주기만 하면 되기 때문에 생성시부터 reply를 FK로 가지고 있을 필요는 없다. 

고로, @JoinColumn이 아닌 mappedBy를 쓴 것이다. 그리고 컬럼명이 아닌 객체 명을 mappedBy = "board" 이런식으로 넣어주어야 한다.

 

대신에 Reply 테이블에 BoardId가 FK로 존재함.

저작자표시 (새창열림)

'취업 준비 > Spring boot' 카테고리의 다른 글

13. 회원가입을 위한 insert 테스트  (0) 2022.01.24
12. JSON ?  (0) 2022.01.24
10. Reply 테이블 생성하기  (0) 2022.01.22
9. Board 테이블 생성하기  (0) 2022.01.21
8. User 테이블 생성하기  (0) 2022.01.21
'취업 준비/Spring boot' 카테고리의 다른 글
  • 13. 회원가입을 위한 insert 테스트
  • 12. JSON ?
  • 10. Reply 테이블 생성하기
  • 9. Board 테이블 생성하기
Purewater
Purewater
Purewater
프로그램 공부 일기장
Purewater
전체
오늘
어제
  • 분류 전체보기 (237)
    • Front-end (8)
      • Vue (8)
    • 포트폴리오 (3)
      • JSP SHOP (1)
      • Travelanner (1)
      • OAuth2 Blog (1)
    • 취업 준비 (70)
      • Spring boot (43)
      • JPA (1)
      • Spring security (14)
      • React (11)
      • 면접 기록 (1)
    • 국기훈련과정 (57)
      • JAVA 복습노트 (12)
      • Oracle SQL (9)
      • Web (15)
      • JSP (6)
      • Spring (10)
      • 프로젝트 (4)
      • Python (1)
    • 알고리즘 문제풀이 (17)
      • Python3 (13)
      • Kotlin (4)
    • 이것저것 지식 (9)
    • 클라우드 서버 (7)
      • Linux (7)
    • Backend (20)
      • node.js (9)
      • JAVA (6)
      • spring boot (5)
    • DB (1)
      • SQL (1)
    • 잡담 (1)
    • 강의 수강 (1)
    • CS 지식 (41)
      • 디자인패턴 (6)
      • 네트워크 (22)
      • 데이터베이스 (4)

블로그 메뉴

  • 대문
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 자바스크립트
  • 디자인패턴
  • node.js
  • Java
  • redis
  • db
  • GUI
  • Oracle
  • Kotlin
  • node
  • gitignore
  • git
  • PostgreSQL
  • Postman
  • 노드
  • SQL
  • spring
  • js
  • JPA
  • 오라클

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Purewater
11. 연관관계의 주인
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.