Spring/Spring 블로그만들기

[Springboot] 나만의 블로그 만들기 - 11. 연관관계의 주인

개발자하소서 2022. 3. 21. 13:29
728x90
반응형
SMALL

📌 연관관계의 주인

 

- 연관관계 주인 = FK를 가진 오브젝트

 

-Board.java 수정하기

package com.cos.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;


@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder //빌더패턴
@Entity
public class Board {

	
	@Id // primary key
	@GeneratedValue(strategy =GenerationType.IDENTITY)
	// 해당 프로젝트에서 연결된 db의 넘버링 전략을 따라간다.
	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) // board가 many 고, user가 one이라는 뜻
	// 한명의 user는 여러개의 게시글을 쓸 수있다.
	@JoinColumn(name="userId")
	private User user; // DB는 오브젝트를 저장할수없다.
							  //  FK, 자바는 오브젝트를 저장할수있다 	
	
	//mappedBy 연관관계의 주인이 아니다(난 FK가 아니다) --> DB에 컬럼을 만들지 마세요
	@OneToMany (mappedBy = "board", fetch = FetchType.EAGER)// 하나의 게시글은 여러개의 답변을 둘수있다.
	  // ONE = 게시글 , MANY = 답변 	// joincolumn이 필요가 없음.
	private List<Reply> reply;
	
	@CreationTimestamp // 시간이 자동으로 입력된다.
	private Timestamp createDate; // 데이터가 입력될때 현재시간 자동 입력
	
}

 

 

-'EAGER는 항상 조인을 해서 가져오고,

- LAZY는 그 객체(reply)를 실제로 사용할 때 처럼 필요에 의할 때, 조인을 해서 가져온다.'

 

- 게시글 상세보기 페이지에서 '댓글 펼치기' 가 있다면 LAZY를 이용해도 되지만, 없기 때문에 EAGER로 쓴다. 

 

 

**이 부분 너무 어려워서 다시 재공부하기**

 

 

📌연관관계 만들기

@ManyToOne

@OneToMany

@OneToOne

@ManyToMany

ManyToMany는 사용하지 않는다. 그 이유는 서로의 primary key로만 중간 테이블을 생성해주는데,

날짜나 시간 다른 필드들이 필요할 수 있기 때문에,

내가 중간 테이블을 직접만들고 @OneToMany, @OneToMany를 사용한다.

 

https://ict-nroo.tistory.com/127

 

[JPA] @ManyToMany, 다대다[N:M] 관계

다대다[N:M] 실무에선 사용하지 않는 것을 추천한다. 사용하면 안되는 이유를 학습하자. 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 연결 테이블(조인 테이블)

ict-nroo.tistory.com

 

 

 

728x90
반응형
LIST