기존의 Board 모델에서는 board 행 데이터 삭제시 Reply를 어떻게 처리할지 설정이 안되어 있어서 Board 게시글이 삭제가 안된다.
그래서 Board객체 안의 Reply 필드에 대해서 cascade 옵션을 걸어주는 방법으로 문제를 해결할 수 있다.
*cascade는 상위 entity의 영속성 상태가 변경될 때 하위 entity에 어떻게 전파할 것인지 선택하는 옵션임.
https://data-make.tistory.com/668
Board의 글을 삭제하면 거기에 딸린 댓글까지 한꺼번에 다 지워버릴 것이기 때문에
상위 엔티티(Board)를 삭제하면 하위 엔티티(Reply)까지 같이 지워버리는
CascadeType.REMOVE를 사용함.
Board.java 수정
package com.pure.blog.model;
import java.sql.Timestamp;
import java.util.List;
import javax.persistence.CascadeType;
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 javax.persistence.OrderBy;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.CreationTimestamp;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
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, cascade = CascadeType.REMOVE) //하나의 게시글에 여러개의 댓글이 달릴 수 있음. / mappedBy --> 연관관계의 주인이 아님.(FK가 아님을 뜻함.) = DB에 컬럼을 만들지 말아라.
@JsonIgnoreProperties({"board"})
@OrderBy("id desc")
private List<Reply> replys;
@CreationTimestamp
private Timestamp createDate;
}
'취업 준비 > Spring boot' 카테고리의 다른 글
43. 댓글 삭제하기 (0) | 2022.02.02 |
---|---|
41. 회원가입 시 중복 아이디 거르기 (0) | 2022.02.01 |
40. 댓글 쓰기 (0) | 2022.01.31 |
39. 댓글 DB에서 가져와서 출력 + 무한참조 방지 (0) | 2022.01.31 |
38. 댓글 화면 디자인 (0) | 2022.01.31 |