
1. Reply 테이블 만들기
- user와 reply의 관계 : 1 대 N
- board와 reply의 관계 : 1 대 N
- reply와 board의 관계 : 1 대 1
package shop.mtcoding.blog.board;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIncludeProperties;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import shop.mtcoding.blog.reply.Reply;
import shop.mtcoding.blog.user.User;
import shop.mtcoding.blog._core.utils.MyDateUtil;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@NoArgsConstructor
@Data // 변경되는 데이터에만 setter가 필요함
@Table(name = "board_tb")
@Entity
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
// private String username;
// username은 user_tb에도 있기에 외래키로 연관관계 맺어야 함
// @JoinColumn(name = "user_id") 직접 지정할 때
@ManyToOne(fetch = FetchType.LAZY) // ORM 할 것이기에 user 객체 필요
private User user; // DB에 컬럼명 : user_id (변수명_PK키)
@CreationTimestamp // PC로 인해 DB에 INSERT될 때 날짜 주입
private Timestamp createdAt;
// 현재 비어있음
// 초기화해놓는 것이 좋음 -> 댓글이 없으면 for문 돌릴 때 터짐
@OneToMany(mappedBy = "board", fetch = FetchType.LAZY) // 반대방향 -> 필드화될 수 없으니까 외래키의 주인(entity 객체)의 필드명 알려주기
private List<Reply> replies = new ArrayList<>(); // 테이블은 컬렉션이 필드화될 수 없어서 오류가 남
@Transient // 테이블 생성이 안됨
private boolean isOwner;
public void update(){
}
@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;
}
public String getBoardDate(){
return MyDateUtil.timestampFormat(createdAt);
}
}

2. 더미 데이터 추가하기
insert into reply_tb(comment, board_id, user_id, created_at) values('댓글1', 3, 1, now());
insert into reply_tb(comment, board_id, user_id, created_at) values('댓글2', 4, 1, now());
insert into reply_tb(comment, board_id, user_id, created_at) values('댓글3', 4, 1, now());
insert into reply_tb(comment, board_id, user_id, created_at) values('댓글4', 4, 2, now());

3. 필요한 파일 먼저 만들기
- 댓글 목록보기 → 게시글 상세보기 / board에 포함되어있어야 함
- 댓글 쓰기 → controller 만들기
- 댓글 삭제하기 → controller 만들기

Share article