연관관계의 주인 ==> 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 |