메타코딩 SNS프로젝트

54. chapter 10. 댓글 - Comment 모델링하기

정현3 2022. 7. 9. 14:24

이제 '댓글 기능'이 남았다.

'댓글'에는 댓글의 내용, 누가 썼는지, 어디에 썼는지, 언제 썼는지 등이 들어가야 한다.

즉, image 오브젝트와 User 오브젝트도 들어가야 하는데, '연관관계'를 잘 생각해야 한다.

 

1개의 댓글이 있을 때, 이 댓글을 작성할 수 있는 유저는 1명이다. 

반대로 1명의 유저는 여러개의 댓글을 작성할 수 있다.

또, 1개의 댓글은 하나의 게시글에 달릴 수 있고, 

하나의 게시글에는 여러개의 댓글이 달릴 수 있다.

 

User 오브젝트와 Image 오브젝트 모두에게 @ManyToOne의 관계가 된다.

@ManyToOne은 Default값이 EAGER이고, @OneToMany는 LAZY인것을 잊지말자.

package com.cos.photogramstart.domain.comment;

import com.cos.photogramstart.domain.User;
import com.cos.photogramstart.domain.image.Image;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.time.LocalDateTime;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
public class Comment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(length = 100, nullable = false)
    private String content;

    @JoinColumn(name = "userId")
    @ManyToOne(fetch = FetchType.EAGER) //딸려오는것들이 여러개면 Lazy, 한개면 EAGER
    private User user;

    @JoinColumn(name = "imageId")
    @ManyToOne(fetch = FetchType.EAGER)
    private Image image;

    private LocalDateTime createDate; //데이터가 입력된 시간

    @PrePersist
    public void createDate() {
        this.createDate = LocalDateTime.now();
    }
}

.

package com.cos.photogramstart.domain.comment;

import org.springframework.data.jpa.repository.JpaRepository;

public interface CommentRepository extends JpaRepository<Comment, Integer> {
}