Search

72. 스프링부트 포토그램 댓글 구현하기 Comment 모델 만들기

Comment 모델 만들기

댓글에는 내용,시간,누가,어떤 이미지 ← 이렇게 여러가지가 모여지는 오브젝트다. 이거에 맞춰서 테이블로 생성해줘야한다.
성별은 남,여 이렇게 하나의 값을 가져서 user 테이블에 속하지만
댓글 같은 경우는 Image 테이블에 들어갈수가없다.
하나의 이미지에 여러개의 댓글이 달리기때문에 별도로 구분해줘야한다
domain 폴더에 comment 폴더 생성 후 Comment.java 생성
package com.cos.photogramstart.domain.comment; import java.time.LocalDateTime; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import com.cos.photogramstart.domain.image.Image; import com.cos.photogramstart.domain.likes.Likes; import com.cos.photogramstart.domain.user.User; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor @Data @Entity public class Comment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(length =100, nullable=false) private String content; private User user; private Image image; private LocalDateTime createDate; }
Java
복사
하나의 댓글이 한명이 쓴다
한명의 유저는 여러개의 댓글을 쓸 수 있다
@ManyToOne
User
하나의 이미지는 여러개의 댓글이 달릴 수 있다
하나의 댓글에 이미지가… ← 이건 말도 안되기때문에 분석 x
@ManyToOne
Image
package com.cos.photogramstart.domain.comment; import java.time.LocalDateTime; import java.util.List; 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.ManyToOne; import com.cos.photogramstart.domain.image.Image; import com.cos.photogramstart.domain.likes.Likes; import com.cos.photogramstart.domain.user.User; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor @Data @Entity public class Comment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(length =100, nullable=false) private String content; @ManyToOne(fetch = FetchType.EAGER) private User user; @ManyToOne(fetch = FetchType.EAGER) private Image image; private LocalDateTime createDate; }
Java
복사
내가 뭔가를 셀렉트 할 때 여러개를 갖고오면 LAZY(User.java의 image)
하나를 갖고오면 EAGER를 쓴다
package com.cos.photogramstart.domain.comment; import java.time.LocalDateTime; import java.util.List; 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.ManyToOne; import com.cos.photogramstart.domain.image.Image; import com.cos.photogramstart.domain.likes.Likes; import com.cos.photogramstart.domain.user.User; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @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) private User user; @JoinColumn(name = "imageId") @ManyToOne(fetch = FetchType.EAGER) private Image image; private LocalDateTime createDate; }
Java
복사
@JoinColumn 까지 추가해주고
레파지토리까지 생성해준다

Comment 레파지토리 만들기

comment 폴더에 CommentRepository.java 인터페이스 생성
package com.cos.photogramstart.domain.comment; import org.springframework.data.jpa.repository.JpaRepository; public interface CommentRepository extends JpaRepository<Comment, Integer>{ }
Java
복사

*참고