2주차 주제로 나온 것은 ERD 설계와 JPA를 통해서 DB에 적용해보는 것입니다.
지난 번 설정했을 때는 빼먹었던 것이 있어, 추가적인 설정을 했습니다.
spring:
jpa:
hibernate:
ddl-auto: create
위와 같이 JPA를 사용하니 추가적으로 ddl-auto 설정을 해주어야 하는데, 여기에는 몇 가지 옵션이 적용 가능합니다.
실제 서비스 배포시에는 create, create-drop등은 사용하지 않습니다.
우선 ERD 설계에 대한 근거입니다. 익명 게시판을 생각하였고, 게시글 하나에는 여러 개의 댓글이 달릴 수 있다고 생각해 1:N의 관계로 상정하였습니다.
포스트 테이블을 보면 Post_Id를 PK로 설정하여 작성자, 비밀번호, 제목, 내용이 들어갑니다. 비슷하게 댓글 테이블에도 적용됩니다.
Post 엔티티
package com.example.gdsctuk.entity;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
import java.util.List;
@Getter
@Entity
@Table
@Builder
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long postId;
@Column(columnDefinition = "TEXT")
private String title;
@Column(columnDefinition = "TEXT")
private String content;
@Column
private String postWriter;
@Column
private String postPasswd;
@OneToMany(mappedBy = "post")
private List<Comment> comments;
public Post() {}
public Post(Long postId, String title, String content, String postWriter, String postPasswd) {
this.postId = postId;
this.title = title;
this.content = content;
this.postWriter = postWriter;
this.postPasswd = postPasswd;
}
}
Comment 엔티티
package com.example.gdsctuk.entity;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
@Entity
@Getter
@Table
public class Comment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "comment_id")
private Long id;
@Column(columnDefinition = "TEXT")
private String content;
@Column
private String user;
@Column
private String commentPasswd;
@ManyToOne
@JoinColumn(name="postId")
private Post post;
public Comment() {
}
@Builder
public Comment(Long id, String content, String user, String commentPasswd) {
this.id = id;
this.content = content;
this.user = user;
this.commentPasswd = commentPasswd;
}
}
@Id - 클래스 필드 위에 선언해, 해당 Entity의 기본키임을 지정합니다.
@GenerateValue - 기본 키를 자동 생성하는 전략입니다.
@Column - 객체 필드를 테이블 컬럼에 매핑합니다.
@Getter - 자동으로 Getter를 실행할 수 있습니다.
@Builder - Builder 패턴을 자동으로 구현해줍니다.
https://johngrib.github.io/wiki/pattern/builder/
@OnetoMany, @ManytoOne
최종적으로는 이렇게 보게 됩니다!