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