마이콜로 로그인 후 삭제 요청 해보기
오류 발생 확인
💡fk 제약 조건 때문에 게시글을 삭제하면 댓글이 참조하는 게시글이 사라지기 때문에 삭제가 될 수 없음.
- 어노테이션을 이용해서 도움 받기
- 댓글의 FK에 값을 NULL로 변경하고 게시글 삭제
- 댓글을 먼저 삭제하고, 게시글 삭제
cascade 설정 하기
package com.tenco.blog_v2.board;
import com.tenco.blog_v2.reply.Reply;
import com.tenco.blog_v2.user.User;
import jakarta.persistence.*;
import lombok.*;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor
@Entity
@Table(name = "board_tb")
@Getter
@Setter
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 기본키 전략 db 위임
private Integer id;
private String title;
@Lob // 대용량 데이터 저장 가능
private String content;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user; // 게시글 작성자 정보
// created_at 컬럼과 매핑하며, 이 필드는 데이터 저장시 자동으로 설정 됨
@Column(name = "created_at", insertable = false, updatable = false)
private Timestamp createdAt;
// 코드 추가
// 해당 테이블에 컬럼을 만들지 마
// 즉, JPA 메모리상에서만 활용 가능한 필드 이다.
@Transient
boolean isBoardOwner;
// 댓글 엔티티를 넣어서 관계 설정하면 -- 양방향
// 해당 게시글이 삭제되면 종속되어 있는 댓글들을 먼저 삭제 해라
@OneToMany(mappedBy = "board", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
private List<Reply> replies = new ArrayList<>(); // 빠른 초기화
@Builder
public Board(Integer id, String title, String content, User user, Timestamp createdAt) {
this.id = id;
this.title = title;
this.content = content;
this.user = user;
this.createdAt = createdAt;
}
}
'Spring boot > 개념 공부' 카테고리의 다른 글
@SessionAttribute 와 HttpSession을 멤버 필드로 주입 받는것의 문제점 (0) | 2024.11.08 |
---|---|
댓글 쓰기 및 삭제 및 인터셉터 적용 (0) | 2024.11.08 |
댓글 목록 보기 (0) | 2024.11.08 |
댓글 테이블 설계 (엔티티) (0) | 2024.11.08 |
Service 레이어 만들기 (0) | 2024.11.08 |